elasticsearch 弹性搜索如何按日期分组(嵌套在数组中时),elasticsearch,kibana,kibana-4,elasticsearch,Kibana,Kibana 4" /> elasticsearch 弹性搜索如何按日期分组(嵌套在数组中时),elasticsearch,kibana,kibana-4,elasticsearch,Kibana,Kibana 4" />

elasticsearch 弹性搜索如何按日期分组(嵌套在数组中时)

elasticsearch 弹性搜索如何按日期分组(嵌套在数组中时),elasticsearch,kibana,kibana-4,elasticsearch,Kibana,Kibana 4,我的数据库结构如下: { name:"string", .... arrayData: [ { price:100, date: "yyyy-mm-dd" }, { price:120, date: "yyyy-mm-dd" } , { price:150, date: "yyyy-mm-dd" } , { price:250, date: "yyyy-mm-dd" } ] } 如何获得2015

我的数据库结构如下:

{
    name:"string",
    ....
    arrayData: [ 
        { price:100, date: "yyyy-mm-dd" },
        { price:120, date: "yyyy-mm-dd" } ,
        { price:150, date: "yyyy-mm-dd" } ,
        { price:250, date: "yyyy-mm-dd" } 
    ]
}
如何获得2015年的平均价格

我目前的方法是使用此过滤器汇总价格:

{
  "range": {
    "arrayData.date": {
      "gte": "2015-01-01",
      "lt": "2016-01-01"
    }
  }
}
测试聚合:

"aggs": {
    "2": {
      "date_histogram": {
        "field": "arrayData.date",
        "interval": "1y",
        "time_zone": "Europe/Helsinki",
        "min_doc_count": 1
      },
      "aggs": {
        "1": {
          "avg": {
            "field": "arrayData.price"
          }
        }
      }
    }
  }
但这也将得到其他年份的平均值,这些年份的文档在arrayData中具有匹配的日期


这也应该适用于Kibana,因为最后我必须将其添加到仪表板。

使用术语聚合,您将获得结果

       {
            "aggs": {
                 "date": {
                 "terms": {
                 "field": "date"
       },
           "aggs": {
                 "average": {
                 "avg": {
                 "field": "price"
                        }
                         }
                  }
                  }
                  }
                   }

似乎我需要将数组中的对象映射为

根据弹性文件:

内部对象字段数组的工作方式与预期不同。 Lucene没有内部对象的概念,因此Elasticsearch变得平坦 对象层次结构转换为字段名和值的简单列表。对于 例如,以下文档:

{
  "user" : [ 
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "White"
    }
  ]
}
用户字段被动态添加为object类型的字段,并且 将在内部转换为看起来更像 这:

{
  "user.first" : [ "alice", "john" ],
  "user.last" :  [ "smith", "white" ]
}