Elasticsearch按管道存储桶排序术语_脚本聚合

jhiyze9q  于 2023-02-03  发布在  ElasticSearch
关注(0)|答案(2)|浏览(100)

我索引了这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_sumthe_avg等其他聚合时,它工作正常。我确信这是因为the_script_bucket是一个管道聚合,但我希望基于the_script_bucket对术语进行排序,以便(例如)看到100,000个文档的前10个值。这可能吗?

t8e9dugd

t8e9dugd1#

更新:出于性能考虑,这肯定是不可能的。
该问题已关闭,原因如下:
我们只为Elasticsearch添加水平扩展的功能,无论我们添加什么功能,当您在笔记本电脑上运行一个节点并存储50GB数据或在数据服务器上运行1000个节点并存储50 PB数据时,都应该可以正常工作。
从所有碎片中获取所有项并不是水平扩展的,因此我们不添加它。
https://github.com/elastic/elasticsearch/issues/8486#issuecomment-265496605
您必须在客户端执行以下操作:获取所有的桶(这意味着你应该提前知道它会返回多少物品),然后自己排序。我知道,完全适得其反。祝你好运。

相关问题