我有一个模糊查询及其等效范围查询,并且都返回相同的搜索结果。 查询如下:
模糊搜索:
function_exists()
范围搜索
CURL -XGET 'localhost:9200/bank/_search?pretty' -d '
{
"sort": {
"balance": "desc"
},
"query": {
"fuzzy" : {
"balance" :{
"value" : 20000,
"fuzziness" : 10000
}
}
}
}'
所以我的问题是哪一个更有效率?哪一个应该优先于另一个?
答案 0 :(得分:4)
模糊查询使用"Levenshtein edit distance"。它的工作原理如下:
模糊查询生成所有可能在模糊中指定的最大编辑距离内的匹配项,然后检查术语词典以找出索引中实际存在哪些生成的术语。
所以会发生的是创建所有可能的变体,然后检查它们是否存在。这可能比检查gte
或lte
更昂贵,但当然您的确切查询与索引大小相关。
但更重要的是:第一个甚至做你认为它做的事情吗?模糊查看levensteihn距离,例如,如果你将1
与20000
进行比较,那么只有90000
,所以我怀疑后者是在你的结果集中,你甚至不想要。因此,虽然我确实有一个小小的疑问,因为你似乎暗示它的工作方式与你想要的一样,但我仍然会说模糊效率最低,因为它不会产生你想要的实际结果。