elasticsearch 常使用的查询总结

elasticsearch 版本是7.7.0验证

一 、过滤查询

包含 term,terms ,match,multi_match,range,bool,exists,

1、term过滤

        term主要用于精确匹配哪些值,比如数字,日期布尔值或not_analyzed的字符串(未经分析的文本数据类型): 

POST text_index/_search
{"query":{"term":{"type_id":57}}}

POST test_index/_search
{"query":{ "term" : { "date" : "2014-09-01"}}}

# 注意这些句子是在kibana 中执行。其次 test_index是索引名

2、terms过滤

        terms跟term有点类似,但terms允许指定多个匹配条件。如果某个字段指定了多个值,那么文档需要一起去做匹配:

POST test_index/_search
{"query":{"terms" : {"tag" : { "search" , "full_text" , "nosql" }}}}

3、range过滤

       range过滤允许我们按照指定范围查找一批数据

 {

           "range" : {

               "age" : {

                   "gte" : 20,

                   "lt" :30

               }

           }

       }

  范围操作符包含:

       gt         →   大于                                                                     gte      →    大于等于

        lt         →   小于                                                                      lte       →    小于等于

4、exists和missing过滤

       exists和missing过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件

       {"exists" : {"field" : "title"}}

       这两个过滤只是针对已经查询一批数据来,但是想区分出某个字段是否存在的时候使用。

       es7.7.0版本没有missing关键字了。

5、bool过滤

       bool过滤可以用来合并多个过滤条件查询结果布尔逻辑,它包括一个操作符:

       must                       多个查询条件的完全匹配,相当于and。

       must_not               多个查询条件的相反匹配,相当于not。

       should                    至少有一个查询条件匹配,相当于or。

       这些参数可以分别继承一个过滤条件或者一个过滤条件的数组:

       {

            "bool" : {

                "must"  :  { "term" : { "folder" : "inbox" } } ,

                 "must_not" : { "term" : { "folder" : "index" } },

                 "should" : [

                           { "term" : { "term" : { "starred" : true } } },

                           { "term" : { "term" : { "unread" : true } } }    ]

                        }

        }

6、match_all查询

        使用match_all可以查询到所有文档,是没有查询条件下的默认语句。

        {

                 "match_all" : {}

        }

        此查询常用于合并过滤条件。比如说你需要检索所有的邮箱,所有的文档相关性都是相同的,所以得到的_source为1

 

7、match查询

        match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。

        如果你使用match查询一个全文本字段,它会在真正查询之前用分析器先分析一下查询字符:

        {

            "match" : {

                  "tweet" : "About Search"

             }

        }

注意:如果用match下制定了一个确切值,在遇到数字、日期、布尔值或者not_analyzed的字符串时,它将为你搜索你给定的值:

 { "match" : { "age" :  26                     }  }

   { "match" : { "date" : "2014-09-01"  } }

8、multi_match查询

       multi_match查询允许你做match查询的基础上同时搜索多个字段,通俗的讲,就是在多个字段中查询你的文本:

       {

          "multi_match" : {

              "query" : "full text search",

              "fields" : [ "title" , "body" ]

           }

        }

 

二 、查询与过滤条件的合并

        查询语句和过滤语句可以放在各自的上下文中。在Elasticsearch API中我们会看到许多带有query或filter的语句。这些语句既可以包含单条query语句,也可以包含一条filter子句。换句话说,这些语句需要首先创建一个query或filter的上下文关系。

        复合查询语句可以加入其它查询子句,复合过滤子句也可以加入其它过滤子句。通常情况下,一条查询语句需要过滤语句的辅助,全文本搜索除外。

        所以说,查询语句可以包含过滤子句,反之亦然,以便于我们切换query或filter的上下文。这就要求我们在读懂需求的同事构造正确有效的语句。

注意:search API中只能包含 query 语句,所以我们需要用 filtered 来同时包含 "query" 和 "filter" 子句,我们在外层再加入 query 的上下文关系

   

POST speech_index/_search
{"query":{"bool":{"filter":{"match":{"type_id":57}}}}}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai君臣

学会的就要教给人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值