RestHighlevelClient切片滚动不起作用

时间:2019-01-15 08:53:28

标签: java elasticsearch elasticsearch-rest-client

我试图在最短的时间内从Elasticsearch(版本-6.4.2)中获取大量数据记录。 为此,我使用多线程在单独的线程中运行每个切片滚动。

示例:我的查询有3个切片,所以:

thread 1 - slice id 0
thread 2 - slice id 1
thread 3 - slice id 2

但是,当尝试从ID为1和2的切片获取结果时,它将返回0次点击。

我正在尝试RestHighLevelClient#search()

public SearchResponse GetResponse(Integer sliceCount, Integer totalSlice, Integer searchSize, String[] identifiers ) throws IOException 
{

    SliceBuilder sliceBuilder = new SliceBuilder(sliceCount, totalSlice);
    SearchSourceBuilder slicedSource = new SearchSourceBuilder().slice(sliceBuilder);
    slicedSource = slicedSource
        .query(QueryBuilders.boolQuery()
        .must(QueryBuilders.termsQuery("_id", identifiers)));
    return client.search(
      new SearchRequest()
        .indices("indexname")
        .types("type")
        .scroll("scrolltime")
        .source(slicedSource)
      );

}

1 个答案:

答案 0 :(得分:0)

您需要重用SearchSourceBuilder,而不是为每个线程创建它。

请参考:https://github.com/elastic/elasticsearch/issues/24766