【问题标题】:Grouping in Elastic Search弹性搜索中的分组
【发布时间】:2017-04-20 06:06:40
【问题描述】:

我在 elasticSearch 中进行分组操作时遇到问题。

实际上,我的文档中有 3 个字段。如下:

Id Type  Year

现在我想对 ExceptionType 和 Year 进行分组,并将其计入“ResultCount”。

我试过这个,但它不起作用:

.Aggregations(a => a
            .ValueCount("ResultCount", c => c
                .Field(p => p.Id)
                .Field(p=> p.Year)
            ))
             .Aggregations(a => a
                .Terms("Type", st => st
                    .Field(o => o.Type)
                    .Size(10))).Size(5)
             .Aggregations(aa => aa
                    .Max("Year", m =>  m
                        .Field(o => o.Year)
                    ))
           );

请尽快给出这个问题的解决方案。谢谢。

【问题讨论】:

  • 你得到了什么,例外?
  • 我解决了一个异常,但实际上,我没有得到任何输出,我也不知道如何显示该数据或查看数据数据。
  • 值计数聚合适用于单个字段。如果您需要对字段组合进行计数,您可以使用术语子聚合或使用脚本构建组合键以进行值计数。

标签: c# asp.net-mvc linq elasticsearch nest


【解决方案1】:

在这里,我会尽力提供帮助。仅弹性术语和子聚合中没有组这样的东西。如果你想按年份计算错误类型,你可以这样做:

  var response = db.Search<Error>(s => 
                s.Size(0)
                .Aggregations(aggs1 => aggs1.Terms("level1",
                        l1 =>l1.Field(f => f.Type)
                               .Aggregations(aggs2 => aggs2.Terms("leve2", t=> t.Field(f=>f.Year))))));

           foreach (var l1 in response.Aggs.Terms("level1").Buckets)
           {
               foreach (var l2 in l1.Terms("leve2").Buckets)
               {
                   Console.WriteLine("Type:{0}, Year:{1}, Count:{2}", l1.Key, l2.Key, l2.DocCount);
               }
           }

但请记住,如果您想要日期的术语,则这只会对您起作用,除了非分析或关键字字段,您可以使用 date_histogram 聚合之类的东西。 如果你的索引映射看起来像这样

  {
         "properties": {
            "type": {
               "type": "keyword"
            },
            "year": {
               "type": "long"
            }
         }
  }

您将获得每年每种错误类型的项目数 您也可以在嵌套聚合中执行其他类型的聚合 注意:术语聚合是近似的,所以如果您没有得到准确的值,请不要感到惊讶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2021-09-07
    相关资源
    最近更新 更多