技术专题

elasticsearch实现类似mysql 模糊查询(不分词)

2020-03-24  本文已影响0人  奋斗live
一、分词

我们可以先来看下啥叫分词,在es中,分词会对关键词进行一个或者几个分隔,比如输入了 淘宝了压抑,则会查询到 淘宝、宝、淘、压、压抑等关键词有关的文档数据。

而使用过mysql的模糊查询的童鞋们,应该都知道,输入了 淘宝了压抑,则只会出现 淘宝了压抑1、2淘宝了压抑、淘宝了压抑11等相关的数据。它不会对其中的关键词进行分割

二、不分词使用

es对于不分词,其实主要是 match_phrase的使用。我们平时比较多是使用match,这个是会进行分词的

三、实例使用

可以看看以下一个es的resful api查询

{
  "query": {
        "bool": {
          "must":[
            {
              "range":{
                "add_time":{
                  "gte":1564589830,
                  "lte":1564589831
                }
              }
            },{
              "match_phrase":{
                "message": "我被骗了"
              }
            }
            ]
        }
    },
    "collapse":{
      "field":"sess_id"
    }
}

分析:
collapse:折叠的意思,使用这个,可以类似实现mysql的去重处理
match_phrase:查询匹配到 "我被骗了" 的文档数据
range:则类似于mysql的between,add_time在哪个区间中

查询效果如下


image.png
上一篇 下一篇

猜你喜欢

热点阅读