按 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" }
}
}
}
}
我设置了 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" }
}
}
}
}