如何在 NEST 和 Elastic Search 中基于字段进行聚合?

问题描述

我想使用 nesT 在 Elastic Search 中执行聚合,这将模拟以下 sql 查询

select region,bucket,count(dispositioncode)
from tbl
group by region,bucket

我目前的尝试

var dispositionCodes = new TermsQuery
            {
                Isverbatim = true,Field = "trailstatus",Terms = new string[] { "TR" }
            };

ISearchResponse<TrailReportModel> searchResponse =
               ConnectionToES.EsClient()
               .Search<TrailReportModel>
               (s => s
                   .Index(FeedbackIndex)
                   .From(0)
                   .Size(RecordSize)
                     .Query(q => q.MatchAll()
                             
                                .Aggregations(fa => fa

                              .Filter("disp_aggs",f => f.Filter(fd => dispositionCodes))                              
                      )
                      
var result = ((nest.SingleBucketAggregate)searchResponse.Aggregations["disp_aggs"]).DocCount;

这给了我整个记录的计数,而不管 Region 和 Bucket。但我正在寻找每个区域和桶的计数。

我怎样才能做到这一点?

解决方法

没有案例进行测试有点困难,但您可能希望使用 Terms aggregation(在 NEST 中)。

有了这个,您可以指定如下内容:

.Aggregations(a => a
     .Terms("group_by_region",t => t.Field("region"))
     .Terms("group_by_bucket",t => t.Field("bucket")))

这个 answer 也可能有帮助,这是一个类似的问题 :)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...