具有术语聚合的 Elasticsearch 日期直方图报告
Elasticsearch Date Histogram report with Terms aggregation
我正在尝试使用 Nest 插件查询弹性搜索数据。我有一份基于某个领域的年度工作统计报告。目前我为此使用了日期直方图报告,下面是弹性查询。
POST insight/_search
{
"size": "0",
"query": {
"filtered": {
"query": {
"query_string": {
"query": "(onet.familycode: 11)"
}
}
}
},
"aggregations": {
"jobcounts_by_year": {
"date_histogram": {
"field": "jobdate",
"interval": "year",
"format": "yyyy"
},
"aggregations": {
"count_by_occupation_family": {
"terms": {
"field": "onet.family"
}
}
}
}
}
}
等价嵌套查询
result = ElasticSearchClient.Instance.Search<Job>(s => s.Size(0)
.Query(query => query
.Filtered(filtered => filtered
.Query(q => q
.QueryString(qs => qs.Query(queryString)))))
.Aggregations(a => a
.DateHistogram("jobcounts_by_year", dt => dt
.Field(ElasticFields.JobDate)
.Interval("year")
.Format("yyyy")
.Aggregations(a1 => a1
.Terms("top_agg", t => t
.Field(criteria.GroupBy.GetElaticSearchTerm())
.Exclude("NA|Unknown|Not available")
.Size(Constants.DataSizeToCompare)))
)));
一切正常,但现在的问题是迭代结果以获取值,对于正常聚合,我目前正在这样做
data = result.Aggs.Terms("top_agg").Items.Select(item =>
new JobReportResult
{
Group = item.Key,
Count = item.DocCount
}).ToList();
但是 Nest 似乎不支持带有日期直方图桶的桶。
如果我像下面那样尝试,我会得到空引用异常。
result.Aggs.DateHistogram("jobcounts_by_year").Terms("top_agg")
看来我们必须使用类似 below.The d2 现在有 IAggregation
var d1 = result.Aggs.DateHistogram("jobcounts_by_year").Items;
var d2 =(TermsAggregator)d1[0].Aggregations["top_agg"];
但是聚合 属性 没有公开任何值。
我被困在这里了。有人能让我知道如何使用 NEST
访问 DateHistogram Buckets 中的 buckets
此致,
试试这个
var dateHistogram = searchResponse.Aggs.DateHistogram("jobcounts_by_year");
foreach (var item in dateHistogram.Items)
{
var bucket = item.Terms("top_agg");
}
希望对您有所帮助。
我正在尝试使用 Nest 插件查询弹性搜索数据。我有一份基于某个领域的年度工作统计报告。目前我为此使用了日期直方图报告,下面是弹性查询。
POST insight/_search
{
"size": "0",
"query": {
"filtered": {
"query": {
"query_string": {
"query": "(onet.familycode: 11)"
}
}
}
},
"aggregations": {
"jobcounts_by_year": {
"date_histogram": {
"field": "jobdate",
"interval": "year",
"format": "yyyy"
},
"aggregations": {
"count_by_occupation_family": {
"terms": {
"field": "onet.family"
}
}
}
}
}
}
等价嵌套查询
result = ElasticSearchClient.Instance.Search<Job>(s => s.Size(0)
.Query(query => query
.Filtered(filtered => filtered
.Query(q => q
.QueryString(qs => qs.Query(queryString)))))
.Aggregations(a => a
.DateHistogram("jobcounts_by_year", dt => dt
.Field(ElasticFields.JobDate)
.Interval("year")
.Format("yyyy")
.Aggregations(a1 => a1
.Terms("top_agg", t => t
.Field(criteria.GroupBy.GetElaticSearchTerm())
.Exclude("NA|Unknown|Not available")
.Size(Constants.DataSizeToCompare)))
)));
一切正常,但现在的问题是迭代结果以获取值,对于正常聚合,我目前正在这样做
data = result.Aggs.Terms("top_agg").Items.Select(item =>
new JobReportResult
{
Group = item.Key,
Count = item.DocCount
}).ToList();
但是 Nest 似乎不支持带有日期直方图桶的桶。
如果我像下面那样尝试,我会得到空引用异常。
result.Aggs.DateHistogram("jobcounts_by_year").Terms("top_agg")
看来我们必须使用类似 below.The d2 现在有 IAggregation
var d1 = result.Aggs.DateHistogram("jobcounts_by_year").Items;
var d2 =(TermsAggregator)d1[0].Aggregations["top_agg"];
但是聚合 属性 没有公开任何值。
我被困在这里了。有人能让我知道如何使用 NEST
访问 DateHistogram Buckets 中的 buckets此致,
试试这个
var dateHistogram = searchResponse.Aggs.DateHistogram("jobcounts_by_year");
foreach (var item in dateHistogram.Items)
{
var bucket = item.Terms("top_agg");
}
希望对您有所帮助。