如何在 NEST 和 Elastic Search 中基于字段进行聚合?
How to make aggregations on field basis in NEST and 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;
这为我提供了整个记录的计数,与区域和存储桶无关。但我正在寻找每个区域和桶的计数基础。
我怎样才能做到这一点?
没有案例测试有点困难,但你可能想使用 Terms aggregation (in NEST).
有了这个,您可以指定如下内容:
.Aggregations(a => a
.Terms("group_by_region", t => t.Field("region"))
.Terms("group_by_bucket", t => t.Field("bucket")))
这个可能也有帮助,这是一个类似的问题:)
我想使用 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;
这为我提供了整个记录的计数,与区域和存储桶无关。但我正在寻找每个区域和桶的计数基础。
我怎样才能做到这一点?
没有案例测试有点困难,但你可能想使用 Terms aggregation (in NEST).
有了这个,您可以指定如下内容:
.Aggregations(a => a
.Terms("group_by_region", t => t.Field("region"))
.Terms("group_by_bucket", t => t.Field("bucket")))
这个