ES中的三种并(and)查询的方式以及他们的差异

[TOC]

0. 实验背景

主要测试并(and)查询场景下,query_string、match、term三种可以满足并查询条件的方式以及彼此的差异

1. 数据准备

ES中插入两个doc。doc对应的数据结构,tags keyword; tags0 text;

{
"tags0":["马云","阿里巴巴","支付宝"]
"tags1":"马云 阿里巴巴 支付宝"
}
{
"tags0":[""阿里巴巴","支付宝","马云"]
"tags1":"阿里巴巴 支付宝 马云"
}

1. match and查询场景

查询条件

{"query": {"bool": {"must": [
 {"match":{"tag1":{"query":"马云 阿里巴巴","operator":"and"}}}
   ] }    }}

返回结果

{
"tags0":["马云","阿里巴巴","支付宝"]
"tags1":"马云 阿里巴巴 支付宝"
}

2. query_string and查询场景

查询条件

{"query": {"bool": {"must": [
{"query_string":{"query":"tags1:马云 AND 阿里巴巴"}}
   ] }    }}

返回结果

{
"tags0":["马云","阿里巴巴","支付宝"]
"tags1":"马云 阿里巴巴 支付宝"
}
{
"tags0":[""阿里巴巴","支付宝","马云"]
"tags1":"阿里巴巴 支付宝 马云"
}

3. term and查询场景

查询条件

{"query": {"bool": {"must": [
{"term":{"tags0":"马云"}},
{"term":{"tags0":"阿里巴巴"}}
   ] }    }}

返回结果

{
"tags0":["马云","阿里巴巴","支付宝"]
"tags1":"马云 阿里巴巴 支付宝"
}
{
"tags0":[""阿里巴巴","支付宝","马云"]
"tags1":"阿里巴巴 支付宝 马云"
}

4. 结论

结论1: query_string与match的不同
match查询对字段分词后的匹配顺序严格,query_string对字段的匹配顺序不严格,能检索到更多的内容,字段使用更灵活,但是对应的也会消耗更多的资源和性能,查询速度也会更慢

结论2: term与前两者的不同
term这里的查询应该比较好理解,数据结构不同导致的查询方式的不同,前两者为text分词场景,term精准查询的速度更快。实际生产中给出的建议是,如果要用term字段务必保证打的标签是已经分词后的最细结果了,比如“哥德经典语录”类似这样的标签,尽量拆分成 “哥德”,“经典语录”。否则的话效果没前两者要好。

  • tips:具体用哪种和数据结构密切相关,需要提前设计好数据结构和入库的处理方式,这个对个人的考验比较大。

如有其它问题,也可以咨询本人 微信:w63594021
欢迎体验本公司产品: Get智能写作

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章:逻辑结构 第二章:安装部署 1、系统准备 2、mongodb安装 创建所需用户和组 创建mongodb所需...
    点亮生活501阅读 390评论 0 0
  • 作者:王在 所有的名字都容易忘记 只有爱 只有那溶溶的月色里,你优雅温暖的头发,淳淳的涛声,沁人心脾。只有那娇小白...
    王安忆阅读 822评论 8 34
  • 本章目录 Part One:while循环 Part Two:for循环 Part Three:continue和...
    黄烨1121阅读 475评论 0 0
  • “现实版痴人说梦”关系中,认为只有别人改变自己才能好,无疑于你生病,让别人吃药一个道理,那不是一般纠结,是要纠结死...
    阿宁sunny阅读 237评论 0 1