【问题标题】:How to make aggregations on field basis in NEST and Elastic Search?如何在 NEST 和 Elastic Search 中基于字段进行聚合?
【发布时间】:2021-01-27 11:08:00
【问题描述】:

我想使用 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;

这给了我整个记录的计数,而与区域和存储桶无关。但我正在寻找每个区域和存储桶的计数。

我怎样才能做到这一点?

【问题讨论】:

  • 为什么我被否决了?我问是因为我没能解决问题(:
  • 我已经恢复了原始帖子,因为如果帖子显示出一些事先的努力,则更有可能得到答复。目前尚不清楚您问题的这部分内容为何被删除。
  • 读者无法告诉您为什么您收到了反对票,因为选民没有发表评论说明他们投票的原因。我的猜测是,“请帮帮我”的乞求有点需要,而且这里的情况并不好。对您的帖子所做的编辑的快速计数表明,恳求或闲聊的材料已从您之前的问题中删除了至少 70 次。这里优先考虑技术写作。
  • SQL Translate API 可能会为您提供如何在查询 DSL 中表达这一点的好方法:elastic.co/guide/en/elasticsearch/reference/current/…

标签: c# elasticsearch nest dsl


【解决方案1】:

没有案例测试有点困难,但你可能想使用Terms aggregation(在NEST)。

这样,您可以指定如下内容:

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

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

【讨论】:

  • @priyanka.sarkar 这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多