Как построить агрегацию (кол-во) записей с использованием NEST? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть требование для выполнения агрегации (подсчета) записей с использованием оболочки NEST, но для запуска запроса DSL внутри NEST.

Поскольку я не знаю, как его правильно построить, я сделал то же самое используя подход LINQ.

ISearchResponse<AgencyDetailReportModel> searchResponse = ConnectionToESClient().Search<AgencyDetailReportModel>
                (s => s
                    .Index("accountsdata")


                    .From(0)
                    .Size(15000)
                    .Query(q =>
                            q.MatchAll()

                            )
                    );

var allocatedAgencies = agencySearchResponse.Documents.Where(w => !string.IsNullOrEmpty(w.agencyid)).Count(); 

var unAllocatedAgencies = agencySearchResponse.Documents.Where(w => string.IsNullOrEmpty(w.agencyid)).Count();

Как создать запрос DSL внутри NEST?

1 Ответ

1 голос
/ 18 апреля 2020

Итак, для вашего вопроса вам нужно allocAgencies count и unAllocatedAgencies count count. Мы можем достичь этого простым запросом, а не собирать агрегации.

var searchResponse = await highLevelClient.CountAsync<accountsdata>(s => s
                                   .Index("accountsdata")
                                   .Query(q => q
                                      .ConstantScore(c => c
                                        .Filter(f => f
                                            .Bool(b => b
                                                .MustNot(m => m
                                                      .Exists(e => e.Field("agencyid"))))))));

Это для unAllocatedAgencies count и для allocAgencies ниже приведен запрос.

var searchResponse = await highLevelClient.CountAsync<accountsdata>(s => s
                                   .Index("accountsdata")
                                   .Query(q => q
                                      .ConstantScore(c => c
                                        .Filter(f => f
                                            .Bool(b => b
                                                .Must(m => m
                                                      .Exists(e => e.Field("agencyid"))))))));

Дайте мне знать, если у вас возникнут какие-либо проблемы, макс. упомянутая проблема. Спасибо

...