Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在无限循环中滚动的弹性搜索滚动API_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

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

Java 在无限循环中滚动的弹性搜索滚动API,java,elasticsearch,Java,elasticsearch,我试图根据批次获取数据。为此,我们在下面写了一段代码 final Scroll scroll = new Scroll(TimeValue.timeValueMillis(1L)); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(boolQuery) .sort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.DESC

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

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.scrollsearchScrollRequest,RequestOptions.DEFAULT; 这就是为什么你在一个无限循环中运行

改为:

SearchResponse response = client.scroll(searchScrollRequest,RequestOptions.DEFAULT);
scrollId = response.getScrollId();
resultsHits = response.getHits().getHits();
希望这有帮助