ElasticSearch6.7--should和must多条件组合查询,并根据某值排序

时间:2024-03-30 09:50:45

       最开始做ES的时候,只是做单纯做查询,后续由于业务规则,涉及到组合复杂查询,去研究了一下ES,最主要的是BoolQueryBuilderl该类的使用--must和should方法。

        这里介绍一下主要几个类:

         RestHighLevelClient --rest高级客户端,主方法:search(),主参数:SearchRequest,RequestOptions

ElasticSearch6.7--should和must多条件组合查询,并根据某值排序

        SearchRequest --查询主类,主方法:source()主资源方法,主参数:SearchSourceBuilder

         ElasticSearch6.7--should和must多条件组合查询,并根据某值排序

        SearchSourceBuilder --查询主类,主要方法:query()查询条件的拼装,参数:QueryBuilder;from(),size()分页方法;sort()排序方法,参数:SortBuilder<?>

ElasticSearch6.7--should和must多条件组合查询,并根据某值排序

ElasticSearch6.7--should和must多条件组合查询,并根据某值排序

完整代码如下:

ElasticSearch6.7--should和must多条件组合查询,并根据某值排序

SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder mustBuilder = new BoolQueryBuilder();
BoolQueryBuilder shouldBuilder = new BoolQueryBuilder();
shouldBuilder.should(QueryBuilders.termQuery("a", esChatMessageReq.getUserId()));
shouldBuilder.should(QueryBuilders.termQuery("b", esChatMessageReq.getUserId()));
mustBuilder.must(QueryBuilders.matchQuery("c", esChatMessageReq.getMerCode())).must(shouldBuilder);
searchSourceBuilder.query(mustBuilder);
searchSourceBuilder.from((esChatMessageReq.getCurrentPage() - 1) * esChatMessageReq.getPageSize());
searchSourceBuilder.size(esChatMessageReq.getPageSize());
searchSourceBuilder.sort(new FieldSortBuilder("timeStamp").unmappedType("long").order(SortOrder.DESC));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

解析es数据:

SearchHits hits = searchResponse.getHits();
for (SearchHit searchHit : hits.getHits()) {
    String result = searchHit.getSourceAsString();
}