我试着用这里的例子: https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html
关于如何在 elasticsearch 中使用 java 滚动。 这是代码:
QueryBuilder qb = termQuery("multi", "test");
SearchResponse scrollResp = client.prepareSearch("test")
.addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100).get(); //max of 100 hits will be returned for each scroll
//Scroll until no hits are returned
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
//Handle the hit...
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while(scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.
虽然出于某些原因我有一个错误提示 The method prepareSearch(String) is undefined for the type RestHighLevelClient
。
我的 client
变量确实是 RestHighLevelClient
但在教程中它应该是什么。
Ant 的思路是什么问题?
最佳答案
RestHighLevelClient 的工作方式与 TransportClient 不同。
如果您希望将滚动与 RestHighLevelClient 一起使用,则必须遵循以下步骤:
创建 SearchRequest :
SearchRequest request = new SearchRequest("test").scroll(new TimeValue(60000)); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(qb); searchSourceBuilder.sort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC); request.source(searchSourceBuilder);
执行第一个搜索:
SearchResponse scrollResp = client.search(sreq);
这里的客户端是RestHighLevelClient。
对于后续的滚动搜索,创建一个 SearchScrollRequest,然后将其用于滚动:
scrollResp = client.searchScroll(new SearchScrollRequest(scrollResponse.getScrollId()).scroll(new TimeValue(60000)));
有关更多信息,请参阅:Search Scroll API
关于java - Elasticsearch 在 Java 中使用 Scroll api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51377314/