Я сталкиваюсь с множеством странных проблем при попытке использовать _source
в запросе с нумерацией страниц.
Если я использую stream
API, то sourceFilter
полностью отбрасывается. Таким образом, этот запрос не будет генерировать атрибут _source
json в запросе:
SourceFilter sourceFilter = new FetchSourceFilter(new String[]{"emails.sha256"}, null);
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(query)
.withSourceFilter(sourceFilter)
.withPageable(PageRequest.of(0, pageSize))
.build();
elasticsearchTemplate.stream(searchQuery, clazz)
С другой стороны, если я изменю метод stream
на queryForPage
elasticsearchTemplate.queryForPage(searchQuery, clazz)
Запрос Elasticsearch правильно генерирует атрибут _source
json, но затем я сталкиваюсь с проблемами с разбиением на страницы, когда атрибут from
становится намного больше. Я получаю ошибку:
{
"type": "query_phase_execution_exception",
"reason": "Result window is too large, from + size must be less than or equal to: [10000] but was [10002]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting."
}
Я не могу изменить max_result_window
, потому что она всегда будет большой (у меня миллиарды документов).
Я также протестировал startScroll
, который долженрешить проблему с нумерацией страниц, но я получил странную информацию NoSuchMethodError
java.lang.NoSuchMethodError: org.springframework.data.elasticsearch.core.ElasticsearchTemplate.startScroll(JLorg/springframework/data/elasticsearch/core/query/SearchQuery;Ljava/lang/Class;)Lorg/springframework/data/elasticsearch/core/ScrolledPage;
Я использую Spring Data Elasticsearch 3.2.0.BUILD-SNAPSHOT
и Elasticsearch 6.5.4
Любая идея о том, как я могу разбить запрос на страницыно ограничение данных ответа с помощью _source
?