我正在运行multi_match(使用most_fields和“fuzziness”:“AUTO”)查询“Rob”,但我在“Rob”之前得到了“Ron”的结果。
如果我删除了模糊性,它只显示Rob,而不是Ron。但是,我确实想要使用模糊性,我只是希望所有完全匹配的结果更相关并且首先显示。它没有发生。 调查'解释',表明'Ron'的IDF略高。
回到我的问题 - 是否可以为模糊元素配置一些“提升”或“得分”?
答案 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。在您的情况下,“布尔”相似性应该有效。