【问题标题】:Elasticsearch Date Histogram report with Terms aggregation带有术语聚合的 Elasticsearch 日期直方图报告
【发布时间】:2015-06-05 12:32:19
【问题描述】:

我正在尝试使用 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 不支持带有 in Date Histogram 存储桶的存储桶。

如果我像下面这样尝试,我会得到空引用异常。

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 Buckets 中的存储桶

问候,

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    试试这个

    var dateHistogram = searchResponse.Aggs.DateHistogram("jobcounts_by_year");
    
    foreach (var item in dateHistogram.Items)
    {
        var bucket = item.Terms("top_agg");
    }
    

    希望这会有所帮助。

    【讨论】:

    • 我的错没想到NestBucket实现了IEnumerable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2014-07-09
    • 2015-01-30
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多