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" ]
}