Составная агрегация с функцией After - PullRequest
0 голосов
/ 26 марта 2019

Я ищу фрагмент кода после использования функциональности с NEST lib. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#_after.

Заранее спасибо за фрагмент кода

1 Ответ

1 голос
/ 27 марта 2019

Вы можете передать CompositeKey из предыдущего составного агрегата в качестве параметра .After() для нового составного агрегата. Например

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool);
var client = new ElasticClient(settings);

var searchResponse = client.Search<object>(s => s
    .From(0)
    .AllIndices()
    .AllTypes()
    .Aggregations(a => a
        .Composite("composite_agg", c => c
            .Sources(so => so
                .DateHistogram("date", dh => dh
                    .Field("timestamp")
                    .Interval("1d")
                )
                .Terms("product", t => t
                    .Field("product")
                )
            )
        )
    )
);

var compositeAgg = searchResponse.Aggregations.Composite("composite_agg");

searchResponse = client.Search<object>(s => s
    .From(0)
    .AllIndices()
    .AllTypes()
    .Aggregations(a => a
        .Composite("composite_agg", c => c
            .Sources(so => so
                .DateHistogram("date", dh => dh
                    .Field("timestamp")
                    .Interval("1d")
                )
                .Terms("product", t => t
                    .Field("product")
                )
            )
            .After(compositeAgg.AfterKey) // <-- pass the after key from previous agg response
        )
    )
);

Предполагая, что вы используете Elasticsearch 6.x (которым вы должны пользоваться Composite Aggregation), обновите NEST-клиент до последней версии (6.6.0 в настоящее время), так как он содержит исправление для CompositeKey с нулевыми значениями .

...