2

I am trying to fetch a large data records from Elasticsearch (Version - 6.4.2) in a minimal time. To do that, I am using multi threading to run each slice scroll in a separate thread.

example: My query has 3 slices, so:

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

But while trying to get the results from slice id 1 and 2 it's returning 0 hits.

I am trying 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 Answers1

0

You need to reuse SearchSourceBuilder rather to create it for each thread.

Please refer: https://github.com/elastic/elasticsearch/issues/24766