美文网首页
ES中的三种并(and)查询的方式以及他们的差异

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

作者: 9b9f7192095b | 来源:发表于2020-01-03 11:59 被阅读0次

    [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智能写作

    相关文章

      网友评论

          本文标题:ES中的三种并(and)查询的方式以及他们的差异

          本文链接:https://www.haomeiwen.com/subject/xxjzoctx.html