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

【1】创建es7  索引

put localhost:9200/pdi_cust , 注意 PUB_CUST_LABEL 字段分词了。 es7 不支持type ,所以 无需指定type。

{   "mappings"  :{      "properties":{"RCRD_ID":{"type":"keyword"}, "BUSI_CODE":{"type":"keyword"}, "STATE":{"type":"keyword"}, "LOANS":{"type":"nested", "properties" :{"LOAN_NUM":{"type":"keyword"}, "PUB_CUST_LABEL":{"type":"text"}, "DATA_SRC":{"type":"keyword"}, "CUST_NUM": {"type":"keyword"}, "LOAN_BAL_SUM":{"type":"double"}, "OVD_MONEY_SUM": {"type": "double"}}}}}       
}

【2】插入索引文档:  post localhost:9200/pdi_cust/_doc/tr_rd_01

{       "RCRD_ID":"tr_rd_01", "STATE":"PDOS"    , "BUSI_CODE":"pdi", "LOANS":[{"CUST_NUM":"CUST_NUM_01", "DATA_SRC":"VALD", "LOAN_BAL_SUM":"1111", "LOAN_NUM":"LOAN_NUM_01", "OVD_MONEY_SUM":"1111", "PUB_CUST_LABEL":"张三 李四  王五"}]
}

【3】查询索引所有文档

post localhost:9200/pdi_cust/_search

{}

// 查询es所有文档 
{"took": 4,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 1.0,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi","LOANS": [{"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "张三 李四  王五"},{"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "2222","LOAN_NUM": "LOAN_NUM_02","OVD_MONEY_SUM": "2222","PUB_CUST_LABEL": "张三2 李四2  王五2"}]}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_score": 1.0,"_source": {"RCRD_ID": "tr_rd_02","STATE": "PDOS","BUSI_CODE": "pdi","LOANS": [{"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1113","LOAN_NUM": "LOAN_NUM_3","OVD_MONEY_SUM": "1113","PUB_CUST_LABEL": "李四"},{"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1114","LOAN_NUM": "LOAN_NUM_4","OVD_MONEY_SUM": "1114","PUB_CUST_LABEL": "张三"}]}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_score": 1.0,"_source": {"RCRD_ID": "tr_rd_03","STATE": "PDOS","BUSI_CODE": "pdi","LOANS": [{"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1115","LOAN_NUM": "LOAN_NUM_5","OVD_MONEY_SUM": "1115","PUB_CUST_LABEL": "李四 王五"},{"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1116","LOAN_NUM": "LOAN_NUM_6","OVD_MONEY_SUM": "1116","PUB_CUST_LABEL": "张三"}]}}]}
}

【4】根据嵌套类型查询 (filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool 的属性)

【3】根据嵌套类型查询  (filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool  的属性)
3.1、filter: 不计算评分, 查询效率高;有缓存;  (推荐)
    + term: 精确匹配;
    + match: 模糊匹配, 倒排索引;
3.2、must: 要计算评分,查询效率低;无缓存;
    +term: 精确匹配 , 要评分;
    +match:模糊匹配, 要评分;

【荔枝】

1、使用 filter+term实现精确匹配不计分查询;

// dsl 
{"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"}				} , {"nested":{"path":"LOANS", "query":{"bool":{"filter":[{"term": {"LOANS.LOAN_NUM": "LOAN_NUM_01"}}]								}},  "inner_hits": {                            }}				}]}					}
}
// 查询结果
{"took": 8,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "张三 李四  王五"}}]}}}}]}
}

score 为0则表示没有计算得分;

2、使用filter+match 使用不计算得分,但模糊匹配;

// dsl
{"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"match":{"STATE":"PDOS"}				} , {"nested":{"path":"LOANS", "query":{"bool":{"filter":[{"match": {"LOANS.PUB_CUST_LABEL": "张三 李四"}}]								}},  "inner_hits": {                            }}				}]}					}
}
// 结果
{"took": 35,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "张三 李四  王五"}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 1},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "2222","LOAN_NUM": "LOAN_NUM_02","OVD_MONEY_SUM": "2222","PUB_CUST_LABEL": "张三2 李四2  王五2"}}]}}}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_02","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1113","LOAN_NUM": "LOAN_NUM_3","OVD_MONEY_SUM": "1113","PUB_CUST_LABEL": "李四"}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_02","_nested": {"field": "LOANS","offset": 1},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_02","DATA_SRC": "VALD","LOAN_BAL_SUM": "1114","LOAN_NUM": "LOAN_NUM_4","OVD_MONEY_SUM": "1114","PUB_CUST_LABEL": "张三"}}]}}}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_score": 0.0,"_source": {"RCRD_ID": "tr_rd_03","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 0.0,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_nested": {"field": "LOANS","offset": 0},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1115","LOAN_NUM": "LOAN_NUM_5","OVD_MONEY_SUM": "1115","PUB_CUST_LABEL": "李四 王五"}},{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_03","_nested": {"field": "LOANS","offset": 1},"_score": 0.0,"_source": {"CUST_NUM": "CUST_NUM_03","DATA_SRC": "VALD","LOAN_BAL_SUM": "1116","LOAN_NUM": "LOAN_NUM_6","OVD_MONEY_SUM": "1116","PUB_CUST_LABEL": "张三"}}]}}}}]}
}

以上dsl,把 match 换位 term, 查询不到任何结果,因为 PUB_CUST_LABEL 是 text 类型,分词了,term是精确匹配;

 

3、使用 must+term, 实现计算得分并精确匹配(查询效率低于 filter+term),因为 must要计算匹配得分

// dsl
{"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"must":[{"term":{"STATE":"PDOS"}				} , {"nested":{"path":"LOANS", "query":{"bool":{"must":[{"term": {"LOANS.LOAN_NUM": "LOAN_NUM_01"}}]								}},  "inner_hits": {                            }}				}]}					}
}
// 结果 
{"took": 13,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.6739764,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 1.6739764,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.5404451,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 1.5404451,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "张三 李四  王五"}}]}}}}]}
}

4、使用must+match实现计算得分且走倒排索引查询或模糊查询

// dsl
{"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"must":[{"match":{"STATE":"PDOS"}				} , {"nested":{"path":"LOANS", "query":{"bool":{"must":[{"match": {"LOANS.LOAN_NUM": "LOAN_NUM_01"}}]								}},  "inner_hits": {                            }}				}]}					}
}
//结果 
{"took": 10,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.6739764,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_score": 1.6739764,"_source": {"RCRD_ID": "tr_rd_01","STATE": "PDOS","BUSI_CODE": "pdi"},"inner_hits": {"LOANS": {"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.5404451,"hits": [{"_index": "pdi_cust","_type": "_doc","_id": "tr_rd_01","_nested": {"field": "LOANS","offset": 0},"_score": 1.5404451,"_source": {"CUST_NUM": "CUST_NUM_01","DATA_SRC": "VALD","LOAN_BAL_SUM": "1111","LOAN_NUM": "LOAN_NUM_01","OVD_MONEY_SUM": "1111","PUB_CUST_LABEL": "张三 李四  王五"}}]}}}}]}
}

【小结】

1、对于 keyword类型的字段而言, 用 term 和 match 都是可以查询的;但对于 text 类型的分词字段而言,只能用match 才能够查询到结果;

2、根据嵌套类型查询  (filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool  的属性)
2.1、filter: 不计算评分, 查询效率高;有缓存;  (推荐)
    + term: 精确匹配;
    + match: 模糊匹配, 倒排索引;
2.2、must: 要计算评分,查询效率低;无缓存;
    +term: 精确匹配 , 要评分;
    +match:模糊匹配, 要评分;

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

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

相关文章

高级Java必看的10本书

转载自 高级Java必看的10本书 1、深入理解Java虚拟机:JVM高级特性与最佳实践 本书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了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、大型网站技术架构:核心原理与案例分析 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例&#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 这个里程碑版本的新特性,包括Lambdas、流和函数式编程。有了函数式的编程特性,可以让代码更简洁,同时也能自动化地利用多核硬件。全书分四个部分:基础知识、函数式数据处理、高效Java 8 编程和…

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

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

字符串拼接+和concat的区别

转载自 字符串拼接和concat的区别和concat都可以用来拼接字符串,但在使用上有什么区别呢,先来看看这个例子。 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 并发前半部分(并发1)参见: https://blog.csdn.net/PacosonSWJTU/article/details/104855730 【21.4.3】中断 1、Thread类包含 interrupt方法,可以终止被阻塞的任务。这个方法将设置线程的中断状态。 如果一个线程…

HDU1176(DP)

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

Java趣味分享:try/finally

转载自 Java趣味分享:try/finally考虑以下四个测试方法,它们会输出什么?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最佳实践--如何选择队列

转自: 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/ 前一篇文章《如何选择线程数》讲了如何决定线程池中线程个数,这篇文章讨论“如何…

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;总算有了个比较…

HDU2049(错列排序)

国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,…

厉害了,Servlet3的异步处理机制

转载自 厉害了&#xff0c;Servlet3的异步处理机制Servlet3发布好几年了&#xff0c;又有多少人知道它的新特性呢&#xff1f;下面简单介绍下。 主要增加了以下特性&#xff1a; 1、异步处理支持 2、可插性支持 3、注解支持&#xff0c;零配置&#xff0c;可不用配置web.xml ..…

(转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询

转自&#xff1a; https://blog.csdn.net/zx711166/article/details/81906881 聚合查询 聚合是一种基于查询条件对数据进行分桶、计算的方法。 聚合可以嵌套&#xff0c;由此可以组合复杂的操作&#xff08;Bucketing 聚合可以包含 sub-aggregation&#xff09;。 聚合的三种…

3种常见的Class级别的错误

转载自 3种常见的Class级别的错误ClassNotFoundException 很明显&#xff0c;这个错误是 找不到类异常&#xff0c;即在当前classpath路径下找不到这个类。 ClassNotFoundException继承了Exception&#xff0c;是必须捕获的异常&#xff0c;所以这个异常一般发生在显示加载类的…

(转)es 聚合查询并返回每个组的数据

转自&#xff1a; https://blog.csdn.net/ywdhzxf/article/details/84878760 需求 我现在是有一个这样的需求, 我需要在es里面按照 cityarea 进行分组(group by), 并且每个 cityarea的组 需要展示 按照时间排序的前10条, 状态全部为1的数据 实现 { "query": {…