ElasticSearch在匹配查询中考虑词序

时间:2015-01-14 22:33:39

标签: elasticsearch lucene

假设我的索引有两个文档:

  1. “foo bar”
  2. “bar foo”
  3. 当我对“bar foo”进行常规匹配查询时,两个文档都正确匹配,但它们获得相同的相关性分数。但是,我希望在评分期间单词的顺序很重要。换句话说,我希望“bar foo”得分更高。

    所以我尝试将我的匹配查询放在bool查询的must子句中,并包含一个matchIphrase(具有相同的查询字符串)和should子句。这似乎得分正确,直到我用“bar test foo”进行搜索。在这种情况下,match_phrase查询似乎不匹配,并且再次以相等的分数返回命中。

    如何构建我的索引/查询以使其考虑词序,但不要求所有搜索过的词存在于文档中?

2 个答案:

答案 0 :(得分:1)

看一下SpanNearQuery,它允许指定有或没有slop的顺序(术语应该相互分开的距离限制)。

Elasticsearch文档为here

答案 1 :(得分:0)

看看PhraseSearch。您应该将当前搜索与PhraseSearch结合使用(提升PhraseSearch比常规术语匹配高一点)。

Doc:PhraseSearch