按另一个子字段对聚合子字段存储桶进行排序

时间:2020-06-15 11:24:44

标签: sorting aggregation bucket elasticsearch-6.8

我对聚合排序有问题。 将数据导入弹性索引中,我对以“ filter_ *”命名的字段使用以下映射:

  "dynamic_templates": [
    {
      "reflex_attribute": {
        "match": "filter_*",
        "match_mapping_type": "string",
        "mapping": {
          "fields": {
            "raw": {
              "type": "keyword"
            },
            "id": {
              "fielddata": true,
              "analyzer": "reflex_filter_id",
              "type": "text"
            },
            "value": {
              "fielddata": true,
              "analyzer": "reflex_filter_value",
              "type": "text"
            }
          },
          "type": "text"
        }
      }
    }
  ],

因此,每个匹配的字段都有两个子字段(.id和.value)。 数据已导入,例如对于值为“ 90 |红色”的字段“ filter_color”,则子字段“ id”返回“ 90”,子字段“值”返回“红色”-有效,我用kibana进行了检查。

现在,我想获取这些值作为聚合。我这样做是:

 "aggs":{
  "filter_color":{
    "terms": {
      "field": "filter_color.value",
      "size": 10,
      "order": {
        "_key": "asc"
      }
    }
  }
 }

因此,这些聚合按值排序。但我需要按ID(来自“ filter_color.id”字段)对它们进行排序。我知道一种方法可能是只保留这些子字段,然后在查询后在PHP端对该聚合进行拆分和排序。 但这将意味着对该应用程序其余部分进行很多更改。

必须有一种通过“ filter_color.id”对聚合进行排序的方法。我尝试了很多在这里找到的东西。但是对我来说没有任何用。

我正在使用Elasticsearch 6.8.x

希望任何人都可以提供帮助。

0 个答案:

没有答案