美文网首页elasticsearch玩转大数据elasticsearch
二十九、Elasticsearch的误拼写时的fuzzy模糊搜索

二十九、Elasticsearch的误拼写时的fuzzy模糊搜索

作者: 编程界的小学生 | 来源:发表于2017-07-18 14:56 被阅读68次

    搜索的时候可能输入的文本会出现误拼写的情况
    比如输入hallo,这时候也要匹配到hello。

    1、数据准备

    POST /my_index/my_type/_bulk
    { "index": { "_id": 1 }}
    { "text": "Surprise me!"}
    { "index": { "_id": 2 }}
    { "text": "That was surprising."}
    { "index": { "_id": 3 }}
    { "text": "I wasn't surprised."}
    

    2、进行搜索

    GET /my_index/my_type/_search
    {
      "query": {
        "fuzzy": {
          "text" : {
            "value": "surprize",
            "fuzziness": 2
          }
        }
      }
    }
    

    结果

    {
      "took": 16,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
      },
      "hits": {
        "total": 2,
        "max_score": 0.22585157,
        "hits": [
          {
            "_index": "my_index",
            "_type": "my_type",
            "_id": "1",
            "_score": 0.22585157,
            "_source": {
              "text": "Surprise me!"
            }
          },
          {
            "_index": "my_index",
            "_type": "my_type",
            "_id": "3",
            "_score": 0.1898702,
            "_source": {
              "text": "I wasn't surprised."
            }
          }
        ]
      }
    }
    

    结果可以发现我们输入的是surprize,我们写错单词了,应该是surprise,但是结果却是非常完美的。

    fuzziness:2
    含义是最多允许有2个字母写错

    surprize --> surprise -> z -> s,纠正一个字母,就可以匹配上,所以在fuziness指定的2范围内
    surprize --> surprised -> z -> s,末尾加个d,纠正了2次,也可以匹配上,在fuziness指定的2范围内
    surprize --> surprising -> z -> s,去掉e,ing,3次,总共要5次,才可以匹配上,始终纠正不了

    **
    fuzzy搜索以后,会自动尝试将你的搜索文本进行纠错,然后去跟文本进行匹配
    fuzziness,你的搜索文本最多可以纠正几个字母去跟你的数据进行匹配,默认如果不设置,就是2
    **

    但是如果两个term差别特别大,你fuzziness设置100也没用!!!!

    一般推荐如下做法来取代上面的fuzzy

    GET /my_index/my_type/_search
    {
      "query": {
        "match": {
          "text": {
            "query": "SUPPRIZE",
            "fuzziness": "AUTO"
          }
        }
      }
    }
    

    这里用的AUTO,也可以手动设置0-n

    若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
    欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


    qrcode_for_gh_577b64e73701_258.jpg

    相关文章

      网友评论

        本文标题:二十九、Elasticsearch的误拼写时的fuzzy模糊搜索

        本文链接:https://www.haomeiwen.com/subject/jtkhkxtx.html