一架梯子,一头程序猿,仰望星空!

Java Elasticsearch bool组合查询


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查询基本写法