我对聚合排序有问题。 将数据导入弹性索引中,我对以“ 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
希望任何人都可以提供帮助。