ElasticSearch:是否可以给出模糊度较低的分数?

时间:2016-02-09 19:41:37

标签: elasticsearch

我正在运行multi_match(使用most_fields和“fuzziness”:“AUTO”)查询“Rob”,但我在“Rob”之前得到了“Ron”的结果。

如果我删除了模糊性,它只显示Rob,而不是Ron。但是,我确实想要使用模糊性,我只是希望所有完全匹配的结果更相关并且首先显示。它没有发生。 调查'解释',表明'Ron'的IDF略高。

回到我的问题 - 是否可以为模糊元素配置一些“提升”或“得分”?

2 个答案:

答案 0 :(得分:7)

好的,基于此处的建议,我最终得到了以下内容: https://medium.com/@oysterpail/fuzzy-queries-ae47b66b325c#.a4uxw5z0b

他们的解决方案是使用bool should查询。我无法执行此操作,因为我需要查询的这一部分为must(我使用should部分作为相关性),而must的bool查询实际上是{ {1}}。但是,AND + must可以解决问题:

or

这样,来自{ "query":{ "bool":{ "must":{ "or":[ { "multi_match":{ "query":"rob", "fields":[ "username", "firstName", "lastName" ], "type":"most_fields", "fuzziness":"AUTO" } }, { "multi_match":{ "query":"rob", "fields":[ "username", "firstName", "lastName" ], "type":"most_fields" } } ] } } } } 部分的结果仅与查询的第一部分匹配,而完全匹配结果与两个部分匹配,因此它们首先显示。

答案 1 :(得分:1)

一个很老的问题,但我会回答以帮助其他人现在看到它。 好吧,你在 'Rob' 之前得到 'Ron' 的原因是因为 TF/IDF 算法。在您的数据集中,“Rob”这个词的出现次数比“Ron”多,因此算法会给“Rob”一个较低的分数。

如果您只想搜索名称,则可以使用不同的评分算法或 similarity。在您的情况下,“布尔”相似性应该有效。

相关问题