6
我无法使elasticsearch聚合+过滤器适用于嵌套字段。数据架构(相关部分)是这样的:Elasticsearch聚合不适用于嵌套类型字段
"mappings": {
"rb": {
"properties": {
"project": {
"type": "nested",
"properties": {
"age": {
"type": "long"
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
本质“RB”对象包含一个名为“项目”,其中包含两个字段的嵌套场 - “名”和“年龄”。查询我运行:
"aggs": {
"root": {
"aggs": {
"group": {
"aggs": {
"filtered": {
"aggs": {
"order": {
"percentiles": {
"field": "project.age",
"percents": ["50"]
}
}
},
"filter": {
"range": {
"last_updated": {
"gte": "2015-01-01",
"lt": "2015-07-01"
}
}
}
}
},
"terms": {
"field": "project.name",
"min_doc_count": 5,
"order": {
"filtered>order.50": "asc"
},
"shard_size": 10,
"size": 10
}
}
},
"nested": {
"path": "project"
}
}
}
这个查询应该产生前10名项目(project.name场)匹配日期过滤器,通过他们的平均年龄排序其中,忽视了项目不到5提到数据库。只应为与过滤器匹配的项目(日期范围)计算中间值。
尽管数据库中有超过十万个对象,但此查询会生成空列表。没有错误,只是空的回应。我已经在ES 1.6和ES 2.0-beta上试过了。
它的工作原理!我只需将shard_size增加到100即可获得10个值。你介意解释为什么我原来的变体不起作用? ES中的限制是它不支持嵌套字段中的过滤器吗? – extesy
在“嵌套”聚合中,您只能引用嵌套字段。此外,首先根据last_updated过滤掉数据,然后才能对嵌套数据进行操作。 – Val
@Val - 你能告诉我怎么做多值桶? 分开的问题 - http://stackoverflow.com/questions/43451667/elasticsearch-ordering-aggregation-by-nested-aggregation-on-nested-field –