elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Elasticsearch在Java中使用Scroll api

Elasticsearch在Java中使用Scroll api,java,elasticsearch,Java,elasticsearch,我试着在这里使用这个例子: 介绍如何在elasticsearch中与java一起使用scroll。 代码如下: QueryBuilder qb = termQuery("multi", "test"); SearchResponse scrollResp = client.prepareSearch("test") .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC) .setScroll(new T

我试着在这里使用这个例子:

介绍如何在elasticsearch中与java一起使用scroll。 代码如下:

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.
尽管由于某些原因,我有一个错误,它表示RestHighLevelClient类型的方法prepareSearch(String)未定义。 我的
client
变量确实是
RestHighLevelClient
,但在本教程中它应该是这样的


ant认为问题出在哪里?

RestHighLevelClient的工作方式与TransportClient不同

如果希望将scroll与RestHighLevelClient一起使用,必须遵循以下步骤:

1) 创建一个:

2) 执行第一次搜索:

SearchResponse scrollResp = client.search(sreq);
这里的客户机是RestHighLevelClient

3) 对于后续滚动搜索,请创建SearchScroll请求,然后将其用于滚动:

scrollResp = client.searchScroll(new SearchScrollRequest(scrollResponse.getScrollId()).scroll(new TimeValue(60000)));

有关更多信息,请参阅:elasticsearch 6中有两个API

  • 一个是RESTAPI
  • 一个是传输api
  • 错误表示您使用了RESTAPI的客户端和传输Api的代码

    您需要使用此客户端Api:

    但若您使用RESTAPI将是有益的,因为elasticsearch将在将来删除传输api

    下面是对REST Api的滚动请求:

    scrollResp = client.searchScroll(new SearchScrollRequest(scrollResponse.getScrollId()).scroll(new TimeValue(60000)));