elasticsearch must和should组合查询
elasticsearch 查询 组合 must should
2023-09-14 08:57:00 时间
Es查询,解构类似: A & (a & b & c) or (c & e)
JavaAPI写法:
BoolQueryBuilder query = QueryBuilders.boolQuery(); BoolQueryBuilder q1 = QueryBuilders.boolQuery(); q1.must(QueryBuilders.termQuery("flag_best", 1)); q1.must(QueryBuilders.termQuery("flag_fornew", 1));
q1.must(QueryBuilders.termQuery("flag_off",0));
BoolQueryBuilder q2 = QueryBuilders.boolQuery(); q2.must(QueryBuilders.prefixQuery("sub_category", "sub")); q2.must(QueryBuilders.termQuery("flag_reviewed", 1));
q2.must(QueryBuilders.termQuery("flag_off",0));
query.should(q1);
query.should(q2);
注意:如果此处存在一个共同的查询值,如flag_off,那么一定要在两个query中分别写出
写成【query.must(QueryBuilders.termQuery("flag_off",0))】将会产生错误
错误写法:(写法本身有问题,并且不能在后面连续进行must会溢出。应参照文章最后JSON结构来写Java代码)
query.should(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("flag_best",1)).must(QueryBuilders.termQuery("flag_fornew",1)).must(QueryBuilders.termQuery("flag_off",0)));
query.should(QueryBuilders.boolQuery().must((QueryBuilders.prefixQuery("sub_category","sub"))).must(query.must(QueryBuilders.termQuery("flag_reviewed", 1)).must(QueryBuilders.termQuery("flag_off",0))));
JSON正确格式:
{ "from": 0, "size": 50, "query": { "bool": { "should": [ { "bool": { "must": [ { "term": { "flag_best": { "value": 1, "boost": 1 } } }, { "term": { "flag_fornew": { "value": 1, "boost": 1 } } }, { "term": { "flag_off": { "value": 0, "boost": 1 } } }, { "range": { "add_time": { "from": "0", "to": "2017-04-20", "include_lower": true, "include_upper": true, "boost": 1 } } } ], "disable_coord": false, "adjust_pure_negative": true, "boost": 1 } }, { "bool": { "must": [ { "prefix": { "sub_category": { "value": "sub", "boost": 1 } } }, { "term": { "flag_reviewed": { "value": 1, "boost": 1 } } }, { "term": { "flag_off": { "value": 0, "boost": 1 } } }, { "range": { "add_time": { "from": "0", "to": "2017-04-20", "include_lower": true, "include_upper": true, "boost": 1 } } } ], "disable_coord": false, "adjust_pure_negative": true, "boost": 1 } } ], "disable_coord": false, "adjust_pure_negative": true, "boost": 1 } }, "explain": true, "sort": [ { "add_time": { "order": "desc" } }, { "image_count": { "order": "desc" } } ] }
JSON错误写法:
{ "from": 0, "size": 50, "query": { "bool": { "must": [ { "term": { "flag_off": { "value": 0, "boost": 1 } } }, { "range": { "add_time": { "from": "0", "to": "2017-04-20", "include_lower": true, "include_upper": true, "boost": 1 } } } ], "should": [ { "bool": { "must": [ { "term": { "flag_best": { "value": 1, "boost": 1 } } }, { "term": { "flag_fornew": { "value": 1, "boost": 1 } } } ], "disable_coord": false, "adjust_pure_negative": true, "boost": 1 } }, { "bool": { "must": [ { "prefix": { "sub_category": { "value": "sub", "boost": 1 } } }, { "term": { "flag_reviewed": { "value": 1, "boost": 1 } } } ], "disable_coord": false, "adjust_pure_negative": true, "boost": 1 } } ], "disable_coord": false, "adjust_pure_negative": true, "boost": 1 } }, "explain": true, "sort": [ { "add_time": { "order": "desc" } }, { "image_count": { "order": "desc" } } ] }
JSON主体结构:
{"query": { "bool": { "should": [ {"bool": { "must": [ {} ] } }, {"bool": { "must": [ {} ] }} ] } } }
相关文章
- 干货 | Elasticsearch Java 客户端演进历史和选型指南
- Elasticsearch集群规划及节点角色规划醉佳实践
- 【2022最新Java面试宝典】—— ElasticSearch面试题(31道含答案)
- 引入Elasticsearch的系统架构实战
- elasticsearch的分布式高可用集群
- elasticsearch集群搭建_Linux如何关闭kafka集群
- 【腾讯云ES】Elasticsearch Aggregations数据统计实践
- JavaRestClient操作Elasticsearch范围查询(range)
- JavaRestClient操作Elasticsearch中的source过滤
- SpringDataElasticsearch操作Elasticsearch创建索引库以及创建映射
- SpringDataElasticsearch操作Elasticsearch自定义方法查询
- ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
- 【ES三周年】Elasticsearch进阶篇 | 记一次Kibana执行DSL脚本分析过程
- Search - 一文入门ElasticSearch(节点、分片、CRUD、倒排索引、分词)
- Windows安装ElasticSearch
- 实战 | 使用Spring Boot + Elasticsearch + Logstash 实现图书查询检索服务
- 【ES三周年】linux-centos7安装elasticsearch-head插件
- 【ES三周年】01-ElasticSearch概述
- 【ES三周年】Elasticsearch性能优化之道:GPT引领你探索索引与查询的奥秘
- ElasticSearch(五) Elasticsearch-jdbc实现MySQL同步到ElasticSearch详解程序员
- 阿里云发布 Elasticsearch 云服务