Нельзя использовать _source с разбиением на страницы в Spring Data Elasticsearch - PullRequest
0 голосов
/ 11 октября 2019

Я сталкиваюсь с множеством странных проблем при попытке использовать _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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...