В предыдущих версиях ES, когда мы не знали ожидаемый размер результата конкретного запроса с агрегацией, мы передавали size: 0
. Но в версиях ES 6.2.x параметр size
не может быть установлен в 0 (ноль), он выдает следующее исключение:
java.lang.IllegalArgumentException: [size] must be greater than 0.
Так каков альтернативный способ сделать это? Я новичок в ES. Я провел поиск в сети и обнаружил, что для этого используется scroll и это решение на SO . Я пробовал использовать функцию прокрутки, но мне кажется, что я что-то не так сделал, что получаю следующее исключение:
org.elasticsearch.search.SearchContextMissingException: No search context found for id [1578]
И я не знаю, как сделать второй вариант в Java. Любая помощь будет отличной. Спасибо.
EDIT
Запрос, который я сейчас использую, так как размер параметра не задан, он возвращает только 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);