排除术语查询中整数字段的设置

时间:2014-08-07 15:13:48

标签: elasticsearch

我的文档包含一个整数数组字段,存储描述它们的标记的id。给定一个特定的标签ID,我想提取一个最常出现的顶级标签列表和提供的标签。

我可以解决这个问题,将术语聚合与标记ID字段相关联到同一字段上的术语过滤器,但我回来的列表显然始终以我提供的相册ID:与我的过滤器匹配的所有文档都有该标记,因此它是列表中的第一个。

我虽然using the exclude field避免创建有问题的存储桶,但是当我处理整数字段时,这似乎是不可能的:此查询

{
  "size": 0,
  "query": {
    "term": {
      "tag_ids": "00001"
    }
  },
  "aggs": {
    "tags": {
      "terms": {
        "size": 3,
        "field": "tag_ids",
        "exclude": "00001"
      }
    }
  }
}

返回错误,说明Aggregation [tags] cannot support the include/exclude settings as it can only be applied to string values

是否有可能避免收回这个桶?

3 个答案:

答案 0 :(得分:3)

从Elasticsearch 1.4开始,这是ES本身的一个缺点。

community proposed此更改后,the functionality has been added将包含在Elasticsearch 1.5.0中。

答案 1 :(得分:0)

自1.5.0版开始,它应该被修复。 看看这个:https://github.com/elasticsearch/elasticsearch/pull/7727

答案 2 :(得分:0)

虽然修复它是有道理的:我的解决方法是让聚合使用脚本而不是直接访问该字段,并让该脚本将该值用作字符串。 效果很好,没有可测量的性能损失。