我索引了这2个文档:
POST my_index/my_type/1
{
"name": "Nephi",
"x": 5
}
POST my_index/my_type/2
{
"name": "Lehi",
"x": 10
}
下面是我的搜索请求:
POST my_index/my_type/_search?size=0
{
"aggs": {
"some_terms_agg": {
"terms": {
"field": "name",
"order": {
"the_script_bucket": "asc"
}
},
"aggs": {
"the_sum": {
"sum": {
"field": "x"
}
},
"the_avg": {
"avg": {
"field": "x"
}
},
"the_script_bucket": {
"bucket_script": {
"buckets_path": {
"a": "the_sum.value",
"b": "the_avg.value"
},
"script": "a + b"
}
}
}
}
}
}
我得到了这样的错误:
术语聚合器顺序路径[the_script_bucket]无效。未知聚合[the_script_bucket]
但是当我将the_script_bucket
更改为the_sum
或the_avg
等其他聚合时,它工作正常。我确信这是因为the_script_bucket
是一个管道聚合,但我希望基于the_script_bucket
对术语进行排序,以便(例如)看到100,000个文档的前10个值。这可能吗?
2条答案
按热度按时间t8e9dugd1#
更新:出于性能考虑,这肯定是不可能的。
该问题已关闭,原因如下:
我们只为Elasticsearch添加水平扩展的功能,无论我们添加什么功能,当您在笔记本电脑上运行一个节点并存储50GB数据或在数据服务器上运行1000个节点并存储50 PB数据时,都应该可以正常工作。
从所有碎片中获取所有项并不是水平扩展的,因此我们不添加它。
https://github.com/elastic/elasticsearch/issues/8486#issuecomment-265496605
您必须在客户端执行以下操作:获取所有的桶(这意味着你应该提前知道它会返回多少物品),然后自己排序。我知道,完全适得其反。祝你好运。
ckx4rj1h2#
看起来这是elasticsearch https://github.com/elastic/elasticsearch/issues/8486https://discuss.elastic.co/t/ordering-terms-aggregation-based-on-pipeline-metric/31839中当前的一个未决问题