我想从Elasticsearch检索所有文档,所以我提到了Search Scroll API。
但是我的问题是,它不返回所有文档,在一个索引中有36个文档,因为它仅返回26个。
即使当我检查另一个索引(其中有超过10k个文档)时,也不会返回最后的10个文档。
我真的不知道为什么会这样返回它!任何帮助将不胜感激!提前致谢!
在我尝试过的代码下面:
final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L));
SearchRequest searchRequest = new SearchRequest("myindex");
searchRequest.scroll(scroll);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query("")//here some query;
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
String scrollId = searchResponse.getScrollId();
SearchHit[] searchHits = searchResponse.getHits().getHits();
while (searchHits != null && searchHits.length > 0) {
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(scroll);
searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
searchHits = searchResponse.getHits().getHits();
for (SearchHits hit: searchHits){
String source=hit.getSourceAsString();
}
}
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
boolean succeeded = clearScrollResponse.isSucceeded();
最佳答案
今天,在处理来自以下方面的示例时,我遇到了同样的问题:
Elastic Scroll API
首先,关于您错过的文档-10是请求大小的默认值,基于此,我们可以假设您的一个请求没有得到正确处理。
您的代码中未处理第一批10个文档:
SearchHit[] searchHits = searchResponse.getHits().getHits();
在循环之前之前,应迭代搜索命中。从第一次开始,我对官方文件还是不清楚。
关于elasticsearch - Elasticsearch Search Scroll API不会从索引中检索所有文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60844667/