ElasticSearch 能否在单个请求中执行具有不同查询条件的多个聚合



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

我有一个产品集合,它具有属性:typecolorbrand。用户选择:brand =间隙color =白色type =凉鞋。要显示每个聚合处各种类似产品的计数,请执行以下操作:

  • brand聚合查询条件:color=白色type=凉鞋
  • color聚合的查询条件:brand =间隙,以及 type =凉鞋
  • type聚合的查询条件:brand=间隙color=白色

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

您将创建三个聚合,每个聚合都有一个filter agg,并在其中添加所需的查询。我使用了最简单的一个 - bool term - 只是为了展示高级方法:

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

相关内容

  • 没有找到相关文章

最新更新