首页 > 解决方案 > ElasticSearch Aggregator with sorting by text/keyword

问题描述

I have elasticsearch set up for searching across a products catalog's variants. Basically where:

Product has_many variants Variant belongs_to product

And the variant index json / mapping contains the product name.

I am trying to search variants, grouped by product id, bucket size of 1. I am able to do it and sort by min price, max price, etc.

This works:

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

This is (sort of) what I need next:

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

My last task is about sorting them alphabetically, but I dont seem to be able to sort by a keyword field (asc/desc) using an aggregator.

标签: ruby-on-railselasticsearchelasticsearch-rails

解决方案


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

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


推荐阅读