我试图在最短的时间内从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)
);
}发布于 2020-07-01 05:53:22
您需要重用SearchSourceBuilder,而不是为每个线程创建它。
https://stackoverflow.com/questions/54195478
复制相似问题