RestHighLevelClient的使用

是什么#

es官网推荐的es客户端组件RestHighLevelClient, 其封装了操作es的crud方法,底层原理就是模拟各种es需要的请求,如put,post,delete,get等方式

使用步骤#

引入pom依赖#

application.yml配置ES#

查询#

// 构建查询参数
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 指定返回字段
String[] includes = new String[]{"name", "age"};
String[] excludes = new String[]{"sex"};
searchSourceBuilder.fetchSource(includes, excludes);
// 构建条件查询
// and = filter/must; or = should
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
searchSourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.termsQuery("id", ids)));
// 时间范围查询
searchSourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.rangeQuery("created_time").from(queryVO.getCreatedTime())));
searchSourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.rangeQuery("created_time").to(queryVO.getEndTime())));
// 分页
Integer size = queryVO.getSize();
Integer from = (queryVO.getPage()-1)*queryVO.getSize();
if (size + from > 10000) {
    throw new RRException("分页参数不合理,暂不处理");
}
searchSourceBuilder.size(size);
searchSourceBuilder.from(from);
searchSourceBuilder.query(boolQueryBuilder);
// 构建请求
SearchRequest searchRequest = new SearchRequest(EsOperateTables.EXCEPTION_HANDLE.getAlias());// ES索引别名
searchRequest.source(searchSourceBuilder);
// 发起请求
SearchResponse searchResponse = new SearchResponse();
try {
            searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
            log.error(ErrorMsgConstant.ES_QUERY_ERROR, e);
            throw new RRException(ErrorMsgConstant.ES_QUERY_ERROR);
}
// 解析SearchResponse
long totalHits = searchResponse.getHits().getTotalHits();
List<Map<String, Object>> mapList = Lists.newArrayListWithCapacity(searchResponse.getHits().getHits().length);
Arrays.stream(searchResponse.getHits().getHits()).forEach(hit -> mapList.add(hit.getSourceAsMap()));
List<ResInfo> resInfos = new ArrayList<>();
if (CollectionUtils.isNotEmpty(mapList)) {
    resInfos = JSON.parseArray(JSON.toJSONString(mapList), ResInfo.class);
}
posted @   yks43  阅读(1631)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示
主题色彩