Elasticsearch bool组合查询,通过must(且)和should(或)逻辑运算组合term、terms、range等ES查询子句,实现复杂的查询需求,类似SQL的where子句。
不了解ES Bool查询,可以参考Elasticsearch Bool查询语法
构建bool查询
// 等价SQL: shop_id=100 and status=3 or (price >= 100 and price <= 300)
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("shop_id", 100)) // 通过must设置term子查询
.must(QueryBuilders.termQuery("status", 3)) // 通过must设置term子查询
.should(QueryBuilders.rangeQuery("price").gte(100).lte(300));// 通过should设置range子查询
bool查询支持多层嵌套,最终组合出复杂的查询条件
创建SearchRequest
Java 所有的ES查询请求都是通过SearchRequest对象进行设置,因此需要实例化SearchRequest对象,设置query参数。
SearchRequest searchRequest = new SearchRequest();
// 通过SearchSourceBuilder构建搜索参数
SearchSourceBuilder builder = new SearchSourceBuilder();
// 设置query参数,绑定前面创建的Query对象
builder.query(boolQueryBuilder);
// 设置SearchRequest搜索参数
searchRequest.source(builder);
执行请求
// 执行ES请求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
提示:如何处理查询结果,请参考 Java ES查询基本写法