繁体   English   中英

ElasticSearch 2 级嵌套聚合,带过滤器(无查询)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM