我将这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"
}
}
}
}
}
}
我收到这样的错误:
无效的term-aggregator顺序路径[the_script_bucket]。未知聚合[the_script_bucket]
但是,当我将the_script_bucket
更改为the_sum
或the_avg
等其他聚合时,它可以正常工作。我确定这是因为the_script_bucket
是一个管道聚合,但我希望根据the_script_bucket
对这些术语进行排序,这样我就可以(例如)查看100,000个文档的前10个值。这可能吗?
答案 0 :(得分:2)
更新:出于性能问题,它绝对不可能。
该问题因以下原因而被关闭:
我们只向Elasticsearch添加可水平扩展的功能。无论我们添加什么,都可以在您的笔记本电脑上运行一个节点时使用50GB的数据或数据服务器中的1000个节点以及50 PB的数据。
从所有分片中获取所有术语不会水平缩放,因此我们不会添加它。
https://github.com/elastic/elasticsearch/issues/8486#issuecomment-265496605
你必须在客户端执行此操作:获取所有存储桶(这意味着您应该事先知道它将返回多少项),然后自己对它们进行排序。我知道,完全适得其反。祝你好运。
答案 1 :(得分:1)