有关为嵌套字段编写Elasticsearch查询的问题

时间:2019-07-05 09:10:57

标签: elasticsearch elastic-stack elasticsearch-aggregation

我在编写带嵌套字段的Elasticsearch查询时遇到问题。我想您可以为我提供帮助,因为我是公司中唯一使用Elastic的公司,而且我不知道如何独自解决问题。

这是我的ES文档在此索引中的外观(非常简化的版本)

{
    "_index":"index_test",
    "_type":"type_test",
    "_id":"1",
    "_score":1.0,
    "_source":{
       "category":1,
       "value_period":[
          {
             "value":5.4,
             "month":"2019-01"
          }
       ],
       "client_id":"80",

    }
 },
 {
    "_index":"index_test",
    "_type":"type_test",
    "_id":"2",
    "_score":1.0,
    "_source":{
       "category":1,
       "value_period":[
          {
             "value":10.0,
             "month":"2019-02"
          }
       ],
       "client_id":"80",

    }
 }{
    "_index":"index_test",
    "_type":"type_test",
    "_id":"2",
    "_score":1.0,
    "_source":{
       "category":2,
       "value_period":[
          {
             "value":20.0,
             "month":"2019-02"
          }
       ],
       "client_id":"80",

    }
 }

这是问题: 我需要针对四个不同的用例编写4个查询:

2个简单查询:“每月总和”和“每个类别的总和”

  • 第一个:date_histogram聚合(在嵌套字段“ value_period.month”上)和求和聚合(在value_period.value上),以便按月获得简单的总和(每月1个值)。
  • 2nd:术语聚合(在字段“ category”上)和总和聚合(在value_period.value上),以便获得每个类别的简单值

2个查询稍微复杂一点:“每个类别的每月总和”和“每月每个类别的总和”

  • 第3次:date_histogram聚合(在嵌套字段“ value_period.month”上),术语聚合(在“ category”字段上)和求和聚合(在value_period.value上),以便获得每个类别每个月的总和

  • 第4个:术语聚合(在“类别”字段上),date_histogram聚合(在嵌套字段“ value_period.month”上)和求和聚合(在value_period.value上),以便每月获得每个类别的总和

对于第一种情况(每月简单值),我已经编写了查询,并且可以正常工作:

{
   "aggs":{
      "nested_field":{
         "nested":{
            "path":"value_period"
         },
         "aggs":{
            "date_agg_interval":{
               "date_histogram":{
                  "field":"value_period.month",
                  "interval":"1M",
                  "format":"yyyy-MM",
                  "min_doc_count":0
               },
               "aggs":{
                  "agg_sum":{
                     "sum":{
                        "field":"value_period.value"
                     }
                  }
               }
            }
         }
      }
   }
}

对于第二种情况(每个类别的值),我尝试了此查询,但是我的汇总结果为空,我真的不知道为什么... 这是查询:

{
   "aggs":{
      "nested_field":{
         "nested":{
            "path":"value_period"
         },
         "aggs":{
            "agg_category":{
               "terms":{
                  "field":"category"
               },
               "aggs":{
                  "agg_sum":{
                     "sum":{
                        "field":"value_period.value"
                     }
                  }
               }
            }
         }
      }
   }
}

对于第三和第四级(聚合的另一个级别),我尝试了很多方法,但是没有任何效果。

我真的要在此先感谢所有能够帮助我并考虑我的要求的人。

PS:请问我的英语水平是法语吗?

丹尼斯

0 个答案:

没有答案