【问题标题】:Elasticsearch Term Aggregations Natural OrderingElasticsearch 术语聚合自然排序
【发布时间】:2018-08-28 06:19:58
【问题描述】:

我正在使用用于聚合的 Elasticsearch 制作产品类别页面。据我所知,ES只能做“_count”、“_term”和通过子聚合来对DSL的聚合结果进行排序。

我的聚合字段是一个字符串字段,未进行分析,但包含“23 EU, 24 EU, 23 Toddler, etc..”等文档。

这是我使用 elastic-builder 包的代码 sn-p

     "aggs":{  
        "ProductFilters.Size":{  
           "terms":{  
              "field":"ProductFilters.Size",
              "size":52,
              "order":{  
                 "_term":"asc"
              }
           }
        },
        "ProductFilters.Size_count":{  
           "cardinality":{  
              "field":"ProductFilters.Size"
           }
        }
     }

然而,这段代码会产生这样的结果。我希望这个结果的生成方式就像人类想要的不是 1 之后的 10 而是 2 的方式。

  • 1 美国青年 (38)
  • 1 青年(3)
  • 10 幼儿 (3)
  • 10 个美国幼儿 (48)
  • 11 幼儿 (3)
  • 2 美国青年 (37)

是否可以使用 ElasticSearch 对聚合进行自然排序?

【问题讨论】:

    标签: javascript elasticsearch elasticsearch-aggregation


    【解决方案1】:

    要进行正确的自然排序,您需要用零填充数字(前提是您知道最大值)。例如假设最大值为 99 字符串“1 Youth”应该变成“01 Youth”。

    没有第三方插件是不可能自动完成的。在 Google 中通过“elasticsearch natural sort”一词快速搜索会导致this 插件,但它似乎并没有得到非常积极的维护。

    【讨论】: