【问题标题】:ElasticSearch Aggregator with sorting by text/keywordElasticSearch 聚合器,按文本/关键字排序
【发布时间】:2018-11-15 06:36:44
【问题描述】:

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

产品有_许多变体 变体belongs_to产品

并且变体索引json/mapping包含产品名称。

我正在尝试搜索变体,按产品 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) 进行排序。

【问题讨论】:

    标签: ruby-on-rails elasticsearch elasticsearch-rails


    【解决方案1】:

    在 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

    【讨论】:

    • 这似乎不起作用。我收到一个奇怪的错误:聚合订单路径 [product_name] 无效。桶只能在子聚合器路径上排序,该路径由路径内的零个或多个单桶聚合以及路径末端的最终单桶或指标聚合构建而成
    • 似乎这对于子聚合器是不允许的,但在根级别有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2017-02-03
    • 2019-11-15
    • 2017-11-04
    • 1970-01-01
    • 2015-01-23
    • 2017-12-31
    • 2016-04-12
    相关资源
    最近更新 更多