如何使用 NEST 构造记录的聚合(计数)?

How to construct Aggregation (Count) of records using NEST?

我需要使用 NEST 包装器执行记录聚合(计数),但要在 NEST 内触发 DSL 查询。

因为我不知道如何正确构建它,所以我使用 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();

如何在 NEST 中构建 DSL 查询?

所以对于你的问题,你需要 allocatedAgencies count 和 unAllocatedAgencies count right.We 可以通过简单的查询而不是去实现用于聚合。

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 计数和针对 allocatedAgencies 的查询。

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"))))))));

如果您遇到任何问题,请告诉我,它最多可以解决您的上述问题。谢谢