我正在尝试Nest插件来查询elasticsearch数据。我有一个基于领域的年度工作计数报告。目前,我为此使用了日期直方图报告,下面是弹性查询。
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不支持带有日期直方图存储桶的存储桶。
如果我尝试如下所示,我将得到null引用异常。
result.Aggs.DateHistogram("jobcounts_by_year").Terms("top_agg")
看来我们必须使用如下所示的方法。d2现在具有IAggregation
var d1 = result.Aggs.DateHistogram("jobcounts_by_year").Items; var d2 =(TermsAggregator)d1[0].Aggregations["top_agg"];
但是Aggregation属性没有公开任何值。
我被困在这里。有人可以让我知道如何使用NEST访问DateHistogram桶中的桶吗
问候,
试试这个
var dateHistogram = searchResponse.Aggs.DateHistogram("jobcounts_by_year"); foreach (var item in dateHistogram.Items) { var bucket = item.Terms("top_agg"); }
希望这可以帮助。