elasticsearch7常见查询(term、match、bool、filter)

一、精准查询term
term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

1、term单值
字段只有一个值时候,用term关键词查询

查询biz_id值为1909190023901225的记录

curl -XGET http://192.168.1.73:9200/xyerp/order/_search -H 'Content-Type: application/json' -d '
{
 "query": {
     "term": {
       "biz_id": "1909190023901225"
      }
 }
}
进一步优化查询,因为是精准查询,不需要查询进行评分计算,只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。推荐如下查询

{  
    "query" : {  
        "constant_score" : {  
             "filter" : {  
                "term" : {  
                    "biz_id" : "1909190023901225"  
                }  
            }  
        }  
    }  
}'
2、terms多值
字段有一多个值时候,用terms关键词查询,后跟数组

{
    "query":{
        "terms":{
            "biz_id":["1909190023901225"]
        }
    }
}'
 constant_score 以非评分模式查询,推荐如下查询

{  
    "query" : {  
        "constant_score" : {  
             "filter" : {  
                "terms" : {  
                    "biz_id" : ["1909190023901225","e1909190111365113"]  
                }  
            }  
        }  
    }  
}'
3、term多个字段
{
    "query": [{
        "term": {
            "biz_id": "1909190023901225"
        }
    }, {
        "term": {
            "name": "zhangsan"
        }
    }]
}
 二、匹配查询match
match和term的区别是 ,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程,match查询相当于模糊匹配,只包含其中一部分关键词就行

match 是模糊查询,而term 是 精确匹配查询;

1、match
进行full text search或者exact value(非string字段或not_analyzed的字段),进行匹配

查询字段merchant_id为2501的值,并按时间倒序

{
   "query": {
     "match": {
       "merchant_id": "2501"
     }
   },
   "sort": [
     {
       "trade_finished_time": {
         "order": "desc"
       }
     }
   ]
}'
2、match_all
{ "match_all": {}} 匹配所有的, 当不给查询条件时,默认全查。

{
    "query": {
        "match_all": {}
    }
}
3、multi_match
同时对查询的关键词,多个字段同时进行匹配,即多个字段是AND的关系

{
    "query":{
        "multi_match":{
            "query":"2501",
            "fields":["merchant_id","_id"]
        }
    }
}
 同时field还支持更为丰富的查询

在在fields中,按brandName(品牌名)、sortName(分类名)、productName(商品名)productKeyword(商品关键字),搜索“牛仔 弹力”关键词,brandName源值、拼音值、关键字值都是100分,sortName源值、拼音值80分,productName源值60分,productKeyword值20分,分值由高到低优先级搜索

{
  "query": {
    "multi_match": {
      "query": "牛仔 弹力",
      "fields": [
        "brandName^100",
        "brandName.brandName_pinyin^100",
        "brandName.brandName_keyword^100",
        "sortName^80",
        "sortName.sortName_pinyin^80",
        "productName^60",
        "productKeyword^20"
      ],
      "type": <multi-match-type>,
      "operator": "AND"
    }
  }
}
4、match_phrase
 match_phrase查询分析文本,并从分析文本中创建短语查询。
类似 match 查询, match_phrase 查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索,但只保留那些包含 全部 搜索词项,且 位置与搜索词项相同的文档

如下,查询 quick brown、quick brown fox、 brown fox可以查询到,quick fox 查询不到

{  
      "query": {  
          "match_phrase": {  
              "title": "quick brown fox"  
          }  
      }  
}  
 如下, 查询 a,b,啊和b之间隔3个字符可以查询到,隔不是3个查询不到

{
    "query":{
        "match_phrase" :{
            "query":"a,b",
            "slop":3
        }
    }
}
三、bool查询
bool查询包含四种操作符,分别是must,should,must_not,query。它们均是一种数组,数组里面是对应的判断条件

must: 必须匹配,与and等价。贡献算分

must_not:必须不匹配,与not等价,常过滤子句用,但不贡献算分

should: 选择性匹配,至少满足一条,与 OR 等价。贡献算分

filter: 过滤子句,必须匹配,但不贡献算分

{  
    "query" : {  
        "filtered" : {  
            "filter" : {  
                "bool" : {  
                    "should" : [  
                        { "term" : {"merchant_id" : 100}},  
                        { "term" : {"pay_type" : "3"}}  
                    ],  
                    "must_not" : {  
                        "term" : {"trade_type" : "2"}  
                    }  
                }  
            }  
        }  
    }  
}'
 四、filter查询
过滤器,会查询对结果进行缓存,不会计算相关度,避免计算分值,执行速度非常快。

如下, 查询出status为active的状态

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "status": "active"
        }
      }
    }
  }
}
filter也常和range范围查询一起结合使用,range范围可供组合的选项

gt : 大于

lt : 小于

gte : 大于等于

lte :小于等于

如下,查询merchant_id值为2501下的交易数据

{
  "query": {
    "bool": {
      "must": {
        "term": {
          "merchant_id": "2501"
        }
      },
      "filter": {
        "range": {
          "trade_finished_time": {
            "from": "2019-09-01T00:00:00",
            "to": "2019-09-30T23:59:59"
          }
        }
      }
    }
  }
}
如下查询,must下匹配,filter进行过滤,range定义范围

{    
    "query": {    
        "bool": {    
            "must": [    
                {   
                    "match": {   
                        "title": "Search"   
                        }  
                },  
                {   
                    "match": {   
                    "content": "Elasticsearch"   
                    }  
                }  
            ],    
            "filter": [  
                {   
                    "term": {   
                        "status": "1"   
                        }  
                },  
                {   
                    "range": {   
                        "publish_date": {   
                        "gte": "2015-01-01"   
                        }  
                    }  
                }  
            ]  
        }  
     }  
}  
五、常见查询场景
1、查询商户ID为3582,订单号为360102199003072618,按时间范围过滤,按下单时间倒序,每次查询100条

{
    "query": {
        "bool": {
            "must": [{
                "term": {
                    "merchant_id": "3582"
                }
            }, {
                "term": {
                    "order_num": "360102199003072618"
                }
            }],
            "filter": [{
                "range": {
                    "order_time": {
                        "from": "2019-11-01T17:00:00+08:00",
                        "to": "2019-11-01T20:00:00+08:00"
                    }
                }
            }]
        }
    },
    "size": 100,
    "sort": [{
        "order_time": "desc"
    }]
}
 
————————————————
版权声明:本文为CSDN博主「LiryZlian」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lzxlfly/article/details/102771175

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud Eureka自我保护机制

转载自 SpringCloud Eureka自我保护机制自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的&#xff0c;没有ZK中角色的概念&#xff0c; 即使N-1个节点挂掉也不会影响其他节点的正常运行。 默认情况下&#xff0c;如果Eureka Server在一定时间内&#xf…

HikariCP-史上最快速的连接池

转载自 HikariCP&#xff0d;史上最快速的连接池 背景 我们知道的连接池有C3P0,DBCP,它们都比较成熟稳定&#xff0c;但性能不是十分好。 所以有了BoneCP这个连接池&#xff0c;它是一个高速、免费、开源的JAVA连接池&#xff0c;它的性能几乎是C3P0、DBCP的25倍&#xff0c;十…

一起来学ES —— 浅谈Nested结构

Nested是什么? 直观的说&#xff0c;Nested实际上就是Object的数组。如下&#xff0c;这个user就是个nested结构 { "user" : [ {"first" : "John","last" : "Smith"},{"first" : "Alice","last…

并集查经典(转发)

首先在地图上给你若干个城镇&#xff0c;这些城镇都可以看作点&#xff0c;然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点&#xff0c;让你判断它们是否连通&#xff0c;或者问你整幅图一共有几个连通分支&#xff0c;也…

关于es查询dsl的filter与must,term与match的区别

【1】创建es7 索引 put localhost:9200/pdi_cust &#xff0c; 注意 PUB_CUST_LABEL 字段分词了。 es7 不支持type &#xff0c;所以 无需指定type。 { "mappings" :{ "properties":{"RCRD_ID":{"type":"keyword"…

高级Java必看的10本书

转载自 高级Java必看的10本书 1、深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践 本书共分为五大部分&#xff0c;围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析&#xff0c;深刻揭示了JVM的工作原理。 2、从Paxos到Zookee…

ES嵌套聚合

【1】 // dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"} }, {"nested":{"path":…

进阶Java架构师必看的15本书

转载自 进阶Java架构师必看的15本书 1、大型网站技术架构&#xff1a;核心原理与案例分析 本书通过梳理大型网站技术发展历程&#xff0c;剖析大型网站技术架构模式&#xff0c;深入讲述大型互联网架构设计的核心原理&#xff0c;并通过一组典型网站技术架构设计案例&#xff0…

HDU2612(BFS算法)

Problem Descrption Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki. Yifenfei’s home is at the countryside, but Merceki’s home is in…

es 嵌套类型聚合

【1】分组后求均值聚合 //dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"} }]} }, "aggs"…

2017年,Java程序猿10本经典好书推荐

1、Java 8实战 本书全面介绍了Java 8 这个里程碑版本的新特性&#xff0c;包括Lambdas、流和函数式编程。有了函数式的编程特性&#xff0c;可以让代码更简洁&#xff0c;同时也能自动化地利用多核硬件。全书分四个部分&#xff1a;基础知识、函数式数据处理、高效Java 8 编程和…

es嵌套聚合dsl(求均值,求和)

【1】根据客户号分组后求均值和求和 // dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"} }]} }, &…

字符串拼接+和concat的区别

转载自 字符串拼接和concat的区别和concat都可以用来拼接字符串&#xff0c;但在使用上有什么区别呢&#xff0c;先来看看这个例子。 public static void main(String[] args) {// example1String str1 "s1";System.out.println(str1 100);//s1100System.out.prin…

thinking-in-java(21)并发2

think-in-java 并发前半部分&#xff08;并发1&#xff09;参见&#xff1a; https://blog.csdn.net/PacosonSWJTU/article/details/104855730 【21.4.3】中断 1、Thread类包含 interrupt方法&#xff0c;可以终止被阻塞的任务。这个方法将设置线程的中断状态。 如果一个线程…

HDU1176(DP)

Problem Description 都说天上不会掉馅饼&#xff0c;但有一天gameboy正走在回家的小径上&#xff0c;忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了&#xff0c;这馅饼别处都不掉&#xff0c;就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了&am…

Java趣味分享:try/finally

转载自 Java趣味分享&#xff1a;try/finally考虑以下四个测试方法&#xff0c;它们会输出什么&#xff1f;public class Test {public static void main(String[] args) {System.out.println(test1());System.out.println(test2());System.out.println(test3());System.out.pr…

(转)ThreadPoolExecutor最佳实践--如何选择队列

转自&#xff1a; https://blog.hufeifei.cn/2018/08/12/Java/ThreadPoolExecutor%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5--%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E9%98%9F%E5%88%97/ 前一篇文章《如何选择线程数》讲了如何决定线程池中线程个数&#xff0c;这篇文章讨论“如何…

HDU1576(欧几里得算法)

Problem Descption 要求(A/B)%9973&#xff0c;但由于A很大&#xff0c;我们只给出n(nA%9973)(我们给定的A必能被B整除&#xff0c;且gcd(B,9973) 1)。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。 每组数据有两个数n(0 < n < 9973)和B(1 < B < 10^…

为什么byte取值-128~127??

转载自 为什么byte取值-128~127??java设计byte类型为1个字节&#xff0c;1个字节占8位&#xff0c;即8bit&#xff0c;这是常识。另外&#xff0c;计算机系统中是用补码来存储的&#xff0c;首位为0表示正数&#xff0c;首位为1表示负数&#xff0c;所以有以下结论&#xff1…

(转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别

最近在看并发编程&#xff0c;在使用到ThreadPoolExecutor时&#xff0c;对它的三个关闭方法&#xff08;shutdown()、shutdownNow()、awaitTermination()&#xff09;产生了兴趣&#xff0c;同时又感到迷惑。查了些资料&#xff0c;自己写了测试代码&#xff0c;总算有了个比较…