最开始做ES的时候,只是做单纯做查询,后续由于业务规则,涉及到组合复杂查询,去研究了一下ES,最主要的是BoolQueryBuilderl该类的使用--must和should方法。
这里介绍一下主要几个类:
RestHighLevelClient --rest高级客户端,主方法:search(),主参数:SearchRequest,RequestOptions
SearchRequest --查询主类,主方法:source()主资源方法,主参数:SearchSourceBuilder
SearchSourceBuilder --查询主类,主要方法:query()查询条件的拼装,参数:QueryBuilder;from(),size()分页方法;sort()排序方法,参数:SortBuilder<?>
完整代码如下:
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();
}