栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

es查询什么时候使用term,什么时候使用match

es查询什么时候使用term,什么时候使用match

match查询是带有分词的,所以一般模糊查询的时候使用match,

term就是精准查询了,必须全部匹配,但是这里有个小细节,直接使用term精准匹配可能查不出来数据,我们看看为啥,

        我们先查询全部的数据,可以看到我们查出来的结果有两个,一个字段city值是York,另一个是New York。

        接下来使用match进行York的匹配,因为match是分词匹配的,两个文档中都有York,所有都查询出来了,

 

 

        我们使用term精准查询匹配York的文档,可以看到,明明有一个值为York的却无法查询出来,

 

        但是当我们将York变成york小写的时候就查询出来了,并且查出来的还是多个,跟使用match没什么区别,这里的原因是因为city是个text类型的字段,被分词器分词了,并且York还被分词器转换成了小写,这时候使用term去查询,其实是拿查询条件和被分词的索引关键字一一匹配,

        此时的倒排索引中拥有 new、york两个索引关键字,使用term精准匹配时,York显然匹配补上york,当我们使用了york时,又因为是和倒排索引匹配的,所以在我们看来不相关的文档 New York也被查了出来,

        这时候就需要我们的keyword字段上场了,和term搭配做到精准匹配的效果,

       这次我在查询条件city后面加了一个city.raw,使用York即匹配上了,这里使用york就不行了,这里的raw其实就是keyword字段,

 

        可以看到,我的es索引在定义的时候,city这个text类型里面还有一个fields的属性,这里涉及到多fileds的概念,名字叫raw,类型是keyword,keyword就是为了在做聚合 排序、精准匹配的时候使用的,keyword不会被分词,直接使用原始的文档去做匹配。

        官方对多fileds的文档:fields | Elasticsearch Guide [7.15] | Elastic,其实就是对一个字段做出多种分词处理,keyword即不分词,

        所以使用term的时候,请多注意一下,需要精准匹配原文档,请带上keyword类型的字段去查询,模糊查询就用match。

        

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号