假设我的索引有两个文档:
当我对“bar foo”进行常规匹配查询时,两个文档都正确匹配,但它们获得相同的相关性分数。但是,我希望在评分期间单词的顺序很重要。换句话说,我希望“bar foo”得分更高。
所以我尝试将我的匹配查询放在bool查询的must子句中,并包含一个matchIphrase(具有相同的查询字符串)和should子句。这似乎得分正确,直到我用“bar test foo”进行搜索。在这种情况下,match_phrase查询似乎不匹配,并且再次以相等的分数返回命中。
如何构建我的索引/查询以使其考虑词序,但不要求所有搜索过的词存在于文档中?
答案 0 :(得分:1)
看一下SpanNearQuery
,它允许指定有或没有slop的顺序(术语应该相互分开的距离限制)。
Elasticsearch文档为here。
答案 1 :(得分:0)
看看PhraseSearch
。您应该将当前搜索与PhraseSearch结合使用(提升PhraseSearch比常规术语匹配高一点)。
Doc:PhraseSearch