首页 > 解决方案 > 如何在聚合中组合相似的项目?

问题描述

我正在尝试创建一个滤色器。返回的颜色大多是正常的,但还有很多其他的颜色不正常。例如,我的结果如下所示:

{ key: "WHITE", doc_count: 300 }, 
{ key: "OFFWHITE", doc_count: 2 }, 
{ key: "SUPER WHITE", doc_count: 1 }

我的聚合看起来像:


aggs: {
    Color: {
        terms: {
            field: 'colors.keyword',
            size: 100,
        },
    },
}

我想将任何包含“白色”的东西组合到一个桶中。与其他顶级颜色相同。这可能吗?如何?

标签: javascriptelasticsearch

解决方案


另一种方法是使用过滤器聚合。这里的过滤器可以是匹配颜色的通配符查询。

聚合如下所示:

{
  "aggs": {
    "WHITE": {
      "filter": {
        "wildcard": {
          "colors.keyword": "*WHITE*"
        }
      }
    },
    "BLUE": {
      "filter": {
        "wildcard": {
          "colors.keyword": "*BLUE*"
        }
      }
    }
  }
}

以上不需要任何脚本。但正如 Kamal 所建议的那样,最好的方法是有一个单独的字段,例如primary_color并对其进行聚合。


推荐阅读