ruby-on-rails - 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.
解决方案
在 ES 6.0 中,您可以这样做。请注意,大小限制了返回的数量,您请求的越多,执行查询的成本就越高。因此,如果您真的需要成千上万的人,您可能会想尝试不同的方法。可能是您为可以搜索/排序的产品创建了单独的汇总索引,而不是尝试通过聚合来完成。
GET /variants/_search
{
"size": 0,
"aggs" : {
"product_name" : {
"terms" : {
"field" : "product_name",
"size": 1000,
"order" : { "_key" : "asc" }
}
}
}
}
推荐阅读
- ios - Swift Firebase - 如何阻止电话号码发布到某个参考
- linux - 如何在 Linux 终端中使用 Python Behave 创建 Hello World 测试?
- javascript - Chrome 75 错误?:编写文本时不会对 HTMLInputElement 元素进行垃圾收集
- javascript - p5.js Rect() 方法未定义
- python - Python Django - 通过列表视图更新 booleanField
- python - 如何将嵌套类移动到单独的文件
- xcode - 如何设置 watchOS 最小部署目标?
- jenkins - Jenkins 的 Katalon 测试执行失败
- javascript - 如何在 JavaScript 中获取剃刀变量(ASP .NET)
- macos - brew uninstall package 删除 usr/local 文件夹