【问题标题】:Fuzzy string matching using Levenshtein algorithm in Elasticsearch在 Elasticsearch 中使用 Levenshtein 算法进行模糊字符串匹配
【发布时间】:2014-03-11 23:20:44
【问题描述】:

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

       }
    }
}'

但它没有返回任何匹配项。我希望圣路易斯的记录会被归还。如何修复我的查询?

谢谢。

【问题讨论】:

    标签: elasticsearch levenshtein-distance fuzzy-search


    【解决方案1】:

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

    在上述情况下,您可能想要做的是为 St. 到 Saint 设置一个 synonym,这将适合您。当然,这取决于您的数据,因为 St 也可能是“街道”。

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

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

    【讨论】:

    • 我有一个查询,应该是 function_score,模糊度为 0.75,multi_match 和 cross_field 我的查询是一个没有最后一个字符的术语 - 例如“NAM”而不是“NAME” 根据模糊规则,它必须返回对我来说,但我没有得到结果。你对这个问题有什么建议?没有 NGRAM 有什么办法吗?
    • Gregory,最好将它作为一个新问题发布,以及您的映射和查询的详细信息。
    • @Gregory fuzziness 不支持 cross_field 类型的 multi_match 查询。
    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 2013-01-01
    • 2011-02-22
    • 2019-05-27
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多