ElasticSearch可以在单个请求中执行具有不同查询条件的多个聚合吗?

时间:2017-05-18 19:04:05

标签: elasticsearch elasticsearch-5

我正在寻找获得聚合的解决方案,每个字段之一,但在不同的聚合中应用不同的查询条件。

我有一系列产品,其中包含以下属性:typecolorbrand。 用户已选择:brand = 差距color = 白色,以及type = 凉鞋。显示每个聚合的各种类似产品的计数:

  • brand汇总的查询条件:color = 白色type = 凉鞋
  • color聚合的查询条件:brand = Gap ,以及 type = 凉鞋
  • type汇总的查询条件:brand = 差距color = 白色

这可以在一个ElasticSearch查询中完成吗?

1 个答案:

答案 0 :(得分:1)

您可以为每个聚合创建三个聚合filter聚合,并在其中添加您想要的查询。我使用了最简单的一个 - boolterm - 只是为了展示高级方法:

  "aggs": {
    "brand_agg": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "color": "white"
              }
            },
            {
              "term": {
                "type": "sandal"
              }
            }
          ]
        }
      }
    },
    "color_agg": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "brand": "gap"
              }
            },
            {
              "term": {
                "type": "sandal"
              }
            }
          ]
        }
      }
    },
    "type_agg": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "color": "white"
              }
            },
            {
              "term": {
                "brand": "gap"
              }
            }
          ]
        }
      }
    }
  }