按 text/keyword 排序的 ElasticSearch 聚合器

ElasticSearch Aggregator with sorting by text/keyword

我设置了 elasticsearch 来搜索产品目录的变体。基本上在哪里:

产品 has_many 变体 变体 belongs_to 产品

变体索引 json/映射包含产品名称。

我正在尝试搜索变体,按产品 ID 分组,存储桶大小为 1。我可以这样做并按最低价格、最高价格等进行排序。

这个有效:

POST /variants/_search?size=0
{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

这是我接下来需要的(某种程度上):

POST /variants/_search?size=0
{
    "aggs" : {
        "product_name" : { "sort by product_name asc / desc" }
    }
}

我的最后一个任务是按字母顺序对它们进行排序,但我似乎无法使用聚合器按关键字字段 (asc/desc) 进行排序。

在 ES 6.0 中,你可以这样做。请注意,大小限制了返回的数量,您请求的越多,查询的执行成本就越高。因此,如果您真的需要数千个,您可能会想尝试不同的方法。可能是您为产品创建了一个单独的汇总索引,您可以 search/sort 而不是尝试通过聚合来做到这一点。

GET /variants/_search
{
    "size": 0,
    "aggs" : {
        "product_name" : {
            "terms" : {
                "field" : "product_name",
                "size": 1000,
                "order" : { "_key" : "asc" }
            }
        }
    }
}

参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-order