クラスター全体に分散された 7 つの異なるインデックスから最大 200K のヒットを返すクエリがあります。結果を次のように処理します。
while (true) {
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();
for (SearchHit hit : scrollResp.getHits()){
//process hit}
//Break condition: No hits are returned
if (scrollResp.hits().hits().length == 0) {
break;
}
}
client.prepareSearchScroll 行が、次の一連の検索ヒットを返す前にかなりの時間ハングする可能性があることに気付きました。これは、コードを長く実行するほど悪化するようです。
私の検索設定は次のとおりです。
SearchRequestBuilder searchBuilder = client.prepareSearch( index_names )
.setSearchType(SearchType.SCAN)
.setScroll(new TimeValue(60000)) //TimeValue?
.setQuery( qb )
.setFrom(0) //?
.setSize(5000); //number of jsons to get in each search, what should it be? I have no idea.
SearchResponse scrollResp = searchBuilder.execute().actionGet();
多くの結果を調べる場合、スキャンとスクロールに時間がかかることが予想されますか? 私はElastic Searchに非常に慣れていないので、非常に明白なものを見落としている可能性があることに注意してください。
私のクエリ:
QueryBuilder qb = QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("tweet", interesting_words));