java - Elastic Search Scroll API 无限循环滚动

标签 java elasticsearch

我试图根据批处理获取数据。为此写了下面的代码

final Scroll scroll = new Scroll(TimeValue.timeValueMillis(1L));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(boolQuery)
                    .sort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.DESC).size(10000);

SearchRequest req = new SearchRequest("logs");
req.scroll(scroll);
req.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(req, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
SearchHit[] resultsHits = searchResponse.getHits().getHits();
logger.info("scrollId:{}",scrollId);
while (resultsHits != null && resultsHits.length > 0) {
   SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);
   searchScrollRequest.scroll(scroll);
   SearchResponse response = client.scroll(searchScrollRequest,RequestOptions.DEFAULT);
   scrollId = response.getScrollId();
   resultsHits = searchResponse.getHits().getHits();

   logger.info("scrollId:{}",scrollId);
   logger.info("resultHits:{}",resultsHits.length);
 }

但是上面的代码正在无限循环中运行。不明白我错过了什么。

最佳答案

您在 while 循环中使用 searchResponse,而不是使用 SearchResponse response = client.scroll(searchScrollRequest,RequestOptions) 中的 response 。默认); 这就是你在无限循环中运行的原因。

更改为:

SearchResponse response = client.scroll(searchScrollRequest,RequestOptions.DEFAULT);
scrollId = response.getScrollId();
resultsHits = response.getHits().getHits();

希望这有帮助

关于java - Elastic Search Scroll API 无限循环滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59247561/

相关文章:

elasticsearch - Elasticsearch 的替代异常检测引擎

Elasticsearch query_string嵌套查询

java - 如何使用 jmockit 注入(inject)模拟依赖

java - 结果集结束后出现 JDBC 错误

elasticsearch - Elasticsearch 无法仅获得匹配数

elasticsearch - Elasticsearch动态类型和not_analyse字段

elasticsearch - 应该使用哪个来搜索XGET或XPOST

java - 读取 InputStream 字节并写入 ByteArrayOutputStream

java - 收到一次经纬度后如何停止这个GPS?

java - 从 netbeans 导出 .jar 文件后,Jpos 打印机无法工作