弹性搜索滚动 API 在无限循环中滚动



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

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.DEFAULT); response这就是你在无限循环中运行的原因。

更改为:

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

希望这有帮助

最新更新