【问题标题】:Unable to create nested date aggregation query无法创建嵌套日期聚合查询
【发布时间】:2019-04-11 18:42:25
【问题描述】:

我正在尝试创建一个 ElasticSearch 聚合查询,它可以在我所有摄取的文档中生成总和或平均值。

文件的格式为 -

{
"weather":"cold",
"date_1":"2017/07/05",
"feedback":[
    {
    "date_2":"2017/08/07",
    "value":28,
    "comment":"not cold"
    },{
    "date_2":"2017/08/09",
    "value":48,
    "comment":"a bit chilly"
    },{
    "date_2":"2017/09/07",
    "value":18,
    "comment":"very cold"
    }, ...
    ]
}

我可以通过以下请求使用“date_1”创建所有“feedback.value”的总和聚合 -

GET _search
{
"query": {
        "query_string": {
                "query": "cold"
                 }
        },
"size": 0,
"aggs": {
        "temperature": {
                    "date_histogram":{
                                      "field" : "date_1",
                                      "interval" : "month"
                                      },
                      "aggs":{
                              "temperature_agg":{
                                                "terms": {
                                                        "field": "feedback.value"
                                                          }
                                                }
                              }

                    }
        }
}

但是,我需要在基于“feedback.date_2”的所有文档聚合中生成相同的查询。我不确定 ElasticSearch 是否可以解决这种聚合或如何处理它。任何指导都会有所帮助

[编辑] 映射文件(我只定义嵌套项,ES自己识别其他字段)

{
 "mappings": {
  "catalog_item": {
   "properties": {

      "feedback":{
          "type":"nested",
          "properties":{
              "date_2":{
                  "type":   "date",
                  "format":"YYYY-MM-DD"
              }, 

                "value": {
                "type": "float"
              },

                "comment": {
                "type": "text"
              }


          }
        }

   }
  }
 }
}

【问题讨论】:

  • 你能粘贴你的映射吗?
  • 在编辑中添加了映射文件
  • 更新了我的答案。让我知道这是否是您的目标。
  • 谢谢,但我想通过“feedback.date_2”对“feedback.value”进行总和/平均聚合。如我的帖子所示,我能够按“date_1”进行汇总。

标签: elasticsearch elasticsearch-aggregation


【解决方案1】:

您需要使用nested documentssum aggregation

这是一个工作示例:

示例映射:

PUT test
{
  "mappings": {
    "doc": {
      "properties": {
        "feedback": {
          "type": "nested"
        }
      }
    }
  }
}

添加示例文档:

PUT test/doc/1
{
   "date_1": "2017/08/07",
  "feedback": [
    {
      "date_2": "2017/08/07",
      "value": 28,
      "comment": "not cold"
    },
    {
      "date_2": "2017/08/09",
      "value": 48,
      "comment": "a bit chilly"
    },
    {
      "date_2": "2017/09/07",
      "value": 18,
      "comment": "very cold"
    }
  ]
}

根据 date_2 计算总和和平均值。

GET test/_search
{
  "size": 0,
  "aggs": {
    "temperature_aggregation": {
      "nested": {
        "path": "feedback"
      },
      "aggs": {
        "temperature": {
          "date_histogram": {
            "field": "feedback.date_2",
            "interval": "month"
          },
          "aggs": {
            "sum": {
              "sum": {
                "field": "feedback.value"
              }
            },
             "avg": {
              "avg": {
                "field": "feedback.value"
              }
            }
          }
        }
      }
    }
  }
}

【讨论】:

  • 我想通过“feedback.date_2”对“feedback.value”进行总和/平均聚合。如我的帖子所示,我能够按“date_1”进行汇总。
  • 我收到以下错误 - { "shard" : 0, "index" : "weather_data", "node" : "TzVL2gN8T5Se1VVZO8cjlw", "reason" : { "type" : "aggregation_execution_exception", "reason" : "[nested] nested path [feedback] is not nested" } },...
  • 也有一些响应,这个错误是因为一些“反馈”列表是空的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2021-09-14
  • 2016-01-27
相关资源
最近更新 更多