我有一个查询返回来自分布在我们集群中的 7 个不同索引的约 20 万次点击。我将我的结果处理为:
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));