美文网首页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