【问题标题】:Filter elasticsearch bucket aggregation based on term field根据 term 字段过滤 elasticsearch bucket 聚合
【发布时间】:2018-06-15 15:10:45
【问题描述】:

我有一个产品列表(deal 实体),我正在尝试按类别创建存储桶聚合,按 available_stock 的总和排序。

这一切都很好,但我想从结果聚合中排除那些没有将 level 设置为 1 的类别(换句话说,我只想保留 level IS 1 的类别的聚合) .

我知道 elasticsearch 提供“排除”和“包含”参数,但这些仅适用于我正在聚合的同一字段(在本例中为 deal.category.id)

这是我的示例deal 文档:

{
  "_source": {
    "id": 392745,
    "category": [
      {
        "id": 17575,
        "level": 2
      },
      {
        "id": 17574,
        "level": 1
      },
      {
        "id": 17572,
        "level": 0
      }
    ],
    "stats": {
      "available_stock": 500
    }
  }
}

这将是查询:

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
    }
  },
  "aggs": {
    "mainAggregation": {
      "terms": {
        "field": "deal.category.id",
        "order": {
          "available_stock": "desc"
        },
        "size": 3
      },
      "aggs": {
        "available_stock": {
          "sum": {
            "field": "deal.stats.available_stock"
          }
        }
      }
    }
  },
  "size": 0
}

还有我生成的聚合,遗憾的是包含级别为 0 的类别 17572。

{
  "aggregations": {
    "mainAggregation": {
      "buckets": [
        {
          "key": 17572,
          "doc_count": 30,
          "available_stock": {
            "value": 24000
          }
        },
        {
          "key": 17598,
          "doc_count": 10,
          "available_stock": {
            "value": 12000
          }
        },
        {
          "key": 17602,
          "doc_count": 8,
          "available_stock": {
            "value": 6000
          }
        }
      ]
    }
  }
}

P.S.:目前在 ElasticSearch 1.6 上

更新 1:在对子聚合的各种组合进行各种实验后,问题仍然存在。

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation


    【解决方案1】:

    我发现这不可能解决,因此决定使用两个单独的查询。

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2015-09-17
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多