Elasticsearch通过管道bucket_script聚合对术语进行排序

时间:2016-06-13 21:07:04

标签: elasticsearch

我将这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_sumthe_avg等其他聚合时,它可以正常工作。我确定这是因为the_script_bucket是一个管道聚合,但我希望根据the_script_bucket对这些术语进行排序,这样我就可以(例如)查看100,000个文档的前10个值。这可能吗?

2 个答案:

答案 0 :(得分:2)

更新:出于性能问题,它绝对不可能。

该问题因以下原因而被关闭:

  

我们只向Elasticsearch添加可水平扩展的功能。无论我们添加什么,都可以在您的笔记本电脑上运行一个节点时使用50GB的数据或数据服务器中的1000个节点以及50 PB的数据。

     

从所有分片中获取所有术语不会水平缩放,因此我们不会添加它。

https://github.com/elastic/elasticsearch/issues/8486#issuecomment-265496605

你必须在客户端执行此操作:获取所有存储桶(这意味着您应该事先知道它将返回多少项),然后自己对它们进行排序。我知道,完全适得其反。祝你好运。

答案 1 :(得分:1)