[英]ElasticSearch 2 level nested aggregation w/ filter (No Query)
目标:获取与名为
"ram"
的characteristic
关联的values
product{}.characteristics[].values[]
Product {
"characteristics": [
{
"name": "os",
"values": [
{"value": "android"},
{"value": "ios"}
]
},
{
"name": "ram",
"values": [
{"value": 2},
{"value": 4}
]
}
]
}
我最后尝试过的:
{
"aggs": {
"ram": {
"aggs": {
"values": {
"filter": {
"bool": {
"filter": [
{
"terms": {
"field": {
"characteristics.name": "ram"
}
}
}
]
}
},
"nested": {
"path": "characteristics.values"
}
}
},
"nested": {
"path": "characteristics"
}
}
}
}
返回:
error: x_content_parse_exception: [x_content_parse_exception] Reason: [1:344] [terms_lookup] unknown field [characteristics.name]
我也尝试过:
{
"aggs": {
"characteristics": {
"nested": {
"path": "characteristics"
},
"aggs": {
"ram": {
"filter": {
"bool": {
"must": [{
"term": {
"characteristics.name": "ram"
}
}]
}
},
"aggs": {
"values": {
"terms": {
"field": "characteristics.values.value"
}
}
}
}
}
}
}
}
返回:
error: parsing_exception: [parsing_exception] Reason: Missing definition for aggregation [ram]
如果我不理解某些内容,将不胜感激
这似乎适用于 Elasticsearch 7.15(基于您的第二个示例):
{
"size": 0,
"aggs": {
"characteristics": {
"nested": {
"path": "characteristics"
},
"aggs": {
"ram": {
"filter": {
"bool": {
"must": [
{
"term": {
"characteristics.name": "ram"
}
}
]
}
},
"aggs": {
"values": {
"nested": {
"path": "characteristics.values"
},
"aggs": {
"all_values": {
"terms": {
"field": "characteristics.values.value"
}
}
}
}
}
}
}
}
}
}
虽然这很复杂,所以创建一个额外的“属性值”索引可能是有意义的,该索引将为每个属性值都有一个文档,还包含属性名称和产品 ID/名称? 然后聚合会变得更简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.