elasticsearch - (如何使用 rest 高级客户端和 spring 实现分页?)或 elasticsearchTemplate.queryForPage() 的替代方案
问题描述
我在从传输客户端迁移到 Rest 高级客户端时遇到问题。以下代码不适用于我想用来获取 Class 类型的聚合页面的响应的 RestHighLevelClient。
elasticsearchTemplate.queryForPage(searchQuery, Class.class)
也欢迎使用其他方法实现相同的任何建议。
解决方案
我在没有 Spring 数据 elasticsearch 的情况下使用 restHighLevelClient 的解决方法包含在此代码中(这不是解决方案,但可能对您的解决方案有所帮助):
BoolQueryBuilder criteriaQuerySpecification = getCriteriaQuerySpecification(transactionFilter);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.sort(new FieldSortBuilder("operation_created_at").order(SortOrder.DESC));
sourceBuilder.query(criteriaQuerySpecification);
SearchRequest searchRequest = generateSearchRequest(totalElementsInt, pageNumberInt, sourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
List<OperationDto > operations = Arrays.asList(hits).stream().map(hit -> {
hit.getSourceAsString();
// get operation is a method mapping from hit to your dto using Map<String, Object> sourceAsMap = hit.getSourceAsMap();
OperationDto operation = getOperationDto(hit);
//convert hit to OperationDto
return operation;
}).collect(Collectors.toList());
private SearchRequest generateSearchRequest(Integer totalElementsInt, Integer pageNumberInt, SearchSourceBuilder sourceBuilder) {
SearchRequest searchRequest = new SearchRequest("operation-index").types("operation");
int offset = pageNumberInt *totalElementsInt;
sourceBuilder.from(offset);
sourceBuilder.size(totalElementsInt);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
return searchRequest;
}
推荐阅读
- python - 无法通过 pydrive 对谷歌驱动器进行身份验证
- c - toLower C 中的字符串 0xC0000005
- java - UML 对象图:父或子
- airflow - Apache Airflow (2.0.0b1) - 动态创建任务并在函数中访问 kwargs
- python - 如何使用 discord.py 检索以前的消息
- python-3.x - 超声波传感器 HC-SR04 和 RCWL-1601 的测量速度正在减慢
- python - 大家好,我在使用 pandasql 运行简单的 sql 查询时遇到了一些麻烦
- python - 如何在不弹出 cmd 的情况下使用 .bat 文件启动 .pyw 脚本?
- c - 无法提示用户输入
- amazon-web-services - Redis 集群最小节点 AWS Elasticache