在早期版本的ES中,当我们不知道特定查询的聚合结果的预期大小时,我们传递了size: 0
。但是在ES 6.2.x版本中,无法将参数size
设置为0(零),它会引发以下异常:
java.lang.IllegalArgumentException: [size] must be greater than 0.
那么做这件事的另一种方法是什么。我是ES的初学者。我已经在网上进行了一些搜索,发现可以使用scroll和此solution at SO来进行搜索。我已经尝试过使用滚动选项,但我认为我做错了一些事情,导致出现以下异常:
org.elasticsearch.search.SearchContextMissingException: No search context found for id [1578]
而且我不知道如何在Java中执行第二个选项。任何帮助都会很棒。谢谢。
编辑
我当前正在使用的查询,因为未设置size参数,它仅返回10个结果:
QueryBuilder qb= QueryBuilders
.boolQuery()
.must(termQuery("Key", Val));
SearchRequestBuilder requestBuilder = client.prepareSearch()
.setIndices()
.setTypes(getType())
.setScroll(new TimeValue(ES_TIMEOUT_MS))
.setQuery(qb);
//requestBuilder.setFrom(0);
// requestBuilder.setSize(0);
requestBuilder.addAggregation((terms("name").field("name"))
.subAggregation(topHits("top").size(1).fetchSource(new String[]{ "name","numPosts", "timeCreated", "timeLastActivity", "Key", "indexVersion"},null)));
SearchResponse response = requestBuilder.execute().actionGet(ES_TIMEOUT_MS);