在Elasticsearch中通过子聚合中的其他字段进行排序

时间:2015-07-23 03:05:28

标签: elasticsearch

假设我的索引包含如下文档:

{
    id: 1,
    carId: 1,
    carName: 'Toyota Matrix',
    carClass: 'Compact',
    insured: false
}

是否有可能有一个Elasticsearch查询允许我拥有一个包含Car ID,Car Name,Car class和#insured(通过聚合)的表,并且每列都可以排序?该表看起来像这样:

Car ID | Car name      | Car class | # Insured
-------------------------------------------------------------
     1 | Toyota Matrix | Compact   | 123
     2 | Ford F-150    | Truck     | 78
   ...  

我知道我可以在车牌上创建聚合,然后在#insured上创建子聚合;像这样的东西:

{
    "aggs": {
        "car_id": {
            "terms": {
                "field": "carId"
            },
            "aggs": {
                "insured": { 
                    "filter": {
                        "term": {
                            "insured": "T"
                        }
                    }
                }
            }
        }
    }
}

在这样做的时候,我可以按汽车ID或#insured排序。但是,我不能按汽车名称或汽车类别排序。如果我在汽车名称或汽车类上创建子聚合,它不是单值聚合,所以我不能按它排序。

我有什么方法可以按聚合中的其他字段排序吗?

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的真实问题但是为了对多个字段进行排序是这样做的方法https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html我相信你甚至不需要聚合

{
    "sort" : [
        { "insured" : "desc" },
        { "car_name" : "desc" },
        { "car_id" : "desc" },
        ...
    ],
    "query" : {
        "match_all" : {}
    }
}
相关问题