一、分词
我们可以先来看下啥叫分词,在es中,分词会对关键词进行一个或者几个分隔,比如输入了 淘宝了压抑,则会查询到 淘宝、宝、淘、压、压抑等关键词有关的文档数据。
而使用过mysql的模糊查询的童鞋们,应该都知道,输入了 淘宝了压抑,则只会出现 淘宝了压抑1、2淘宝了压抑、淘宝了压抑11等相关的数据。它不会对其中的关键词进行分割
二、不分词使用
其实主要是 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在哪个区间中
查询效果如下