一尘不染

在Elasticsearch中使用Levenshtein算法进行模糊字符串匹配

elasticsearch

我刚刚开始探索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
           }

       }
    }
}'

但是它没有返回任何匹配。我希望圣路易斯的记录能归还。我该如何解决我的查询?

谢谢。


阅读 461

收藏
2020-06-22

共1个答案

一尘不染

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

在上述情况下,您可能想要做的是将St.改为Saint
同义词,这将与您匹配。当然,这将取决于您的数据,因为St也可能是“街道”。

如果您只想测试模糊搜索,则可以尝试以下示例

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

       }
    }
}
2020-06-22