Cześć
Pytanie związane z ElasticSearch. Wie ktoś jak pobierać identyfikatory dokumentów posortowane w kolejności od najczęściej odpytywanych (tzw. topHits criteria) do najmniej? Znalazłem sposób który działa ale tylko do 10000 dokumentów. Nie powinno się pobierać więkzsej ilości dokumentów tym sposobem który mam teraz (czyli jednorazowy strzał do Elastica) bo jest to niewydajne. Podejrzewam, że trzeba połączyć ze sobą mechanizm Scroll + Bucket + TopHits ale nijak nie wiem jak to zrobić bo albo nie zwraca mi posortowanych dokumentów albo zwraca posortowane ale tylko w obrębie jednego Bucketu co i tak daje ostatecznie złą kolejność wyników. Podsumowując: czy miał ktoś z was do czynienia z pobieraniem dużej ilości elementów z bazy Elastic gdzie elementy będą już posortowane w kolejności tzw. topHits?

P.S. Nie wiem czy da się to zrobić ale wydaje mi się, że nie po to Elastic daje fajny mechanizm pobierania od najćzęściej odpytywanych (topHits) żeby dało się tak pobrać tylko 10 000 elementów.

@Override
    public List<String> getMostSearchedIdentifiers(List<String> indexes,
                                                   final String indexType) {
        SearchResponse sr = null;

        try {
            sr = elasticsearchClient.prepareSearch("order-audit-2018-11-05")
                    .setTypes("order")
                    .setSize(10000)
                    .addAggregation(AggregationBuilders
                            .terms(TAX_ID_AGG)
                            .field("taxIdentity.id.keyword")
                            .size(10000)
                            .subAggregation(AggregationBuilders.topHits(TOP_CRITERIA)))
                    .setIndicesOptions(IndicesOptions.lenientExpandOpen())
                    .setFetchSource(true)
                    .execute()
                    .get();
        } catch (InterruptedException | ExecutionException | IndexNotFoundException e) {
            e.printStackTrace();
        }

        if (Objects.nonNull(sr) && Objects.nonNull(sr.getAggregations())) {

            Terms taxIdAgg = sr.getAggregations().get(TAX_ID_AGG);
            return taxIdAgg.getBuckets().stream()
                    .map(o -> (String) o.getKey())
                    .collect(Collectors.toList());
        }
        return Collections.emptyList();
    }