Elasticsearch中Levenshtein算法的模糊字符串匹配

时间:2014-02-13 07:51:30

标签: elasticsearch levenshtein-distance fuzzy-search

我刚刚开始探索Elasticsearch。我创建了一个文档如下:

curl -XPUT "http://localhost:9200/cities/city/1" -d'
{
    "name": "Saint Louis"

}'

我现在尝试在名字字段上进行模糊搜索,Levenshtein距离为5,如下所示:

curl -XGET "http://localhost:9200/_search " -d'
{
    "query": {
       "fuzzy": {
           "name" : {
               "value" : "St. Louis",
               "fuzziness" : 5
           }

       }
    }
}'

但它没有返回任何比赛。我希望圣路易斯的记录可以归还。我该如何修复我的查询?

感谢。

1 个答案:

答案 0 :(得分:3)

您的查询存在的问题是,只允许最大编辑距离为2。

在上面的情况中,您可能想要做的是为St. to Saint设置一个synonym,这对您来说很匹配。当然,这将取决于您的数据,因为St也可能是“街道”。

如果您只想测试模糊搜索,可以试试这个例子

curl -XGET "http://localhost:9200/_search " -d'
{
    "query": {
       "fuzzy": {
           "name" : {
               "value" : "Louiee",
               "fuzziness" : 2
           }

       }
    }
}