Elasticsearch 在 Java 中使用 Scroll api

The*_*ner 2 java elasticsearch

我尝试在这里使用示例: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.
Run Code Online (Sandbox Code Playgroud)

虽然由于某些原因我有一个错误,上面写着The method prepareSearch(String) is undefined for the type RestHighLevelClient. 我的client变量确实是,RestHighLevelClient但在教程中它应该是。

蚂蚁的想法是什么问题?

Tec*_*Sid 10

RestHighLevelClient 的工作方式与 TransportClient 不同。

如果您希望在 RestHighLevelClient 中使用滚动,则必须遵循以下步骤:

1)创建一个搜索请求

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);
Run Code Online (Sandbox Code Playgroud)

2)执行第一次搜索:

SearchResponse scrollResp = client.search(sreq);
Run Code Online (Sandbox Code Playgroud)

这里的客户端是 RestHighLevelClient。

3) 对于后续的滚动搜索,创建一个 SearchScrollRequest,然后将其用于滚动:

scrollResp = client.searchScroll(new SearchScrollRequest(scrollResponse.getScrollId()).scroll(new TimeValue(60000)));
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:搜索滚动 API