效率更高的是什么?模糊搜索或范围搜索?

时间:2017-03-06 10:16:13

标签: elasticsearch fuzzy-search

我有一个模糊查询及其等效范围查询,并且都返回相同的搜索结果。 查询如下:

模糊搜索:

function_exists()

范围搜索

CURL -XGET 'localhost:9200/bank/_search?pretty' -d ' 
{
    "sort": {
      "balance": "desc"
    },
    "query": {
       "fuzzy" : {
           "balance" :{ 
              "value" :  20000,
              "fuzziness" :  10000
            }
        }
    }
}'

所以我的问题是哪一个更有效率?哪一个应该优先于另一个?

1 个答案:

答案 0 :(得分:4)

模糊查询使用"Levenshtein edit distance"。它的工作原理如下:

  

模糊查询生成所有可能在模糊中指定的最大编辑距离内的匹配项,然后检查术语词典以找出索引中实际存在哪些生成的术语。

所以会发生的是创建所有可能的变体,然后检查它们是否存在。这可能比检查gtelte更昂贵,但当然您的确切查询与索引大小相关。

但更重要的是:第一个甚至做你认为它做的事情吗?模糊查看levensteihn距离,例如,如果你将120000进行比较,那么只有90000,所以我怀疑后者是在你的结果集中,你甚至不想要。因此,虽然我确实有一个小小的疑问,因为你似乎暗示它的工作方式与你想要的一样,但我仍然会说模糊效率最低,因为它不会产生你想要的实际结果。