2016-06-13 37 views
0

I指数这2个文件:Elasticsearch排序方面通过管道bucket_script聚集

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个值。那可能吗?

回答

0

更新:这是绝对不可能的,性能问题。

问题已关闭,原因如下:

我们只有增加新功能Elasticsearch这是横向扩展。无论我们添加什么东西,当您在笔记本电脑上运行50GB数据或1000个数据服务器节点并使用50 PB数据时,都可以运行。

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

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

你必须这样做,在客户端:抓取所有的桶(这意味着你应该事先知道会是多少项目恢复),然后自己进行排序。我知道,完全适得其反。祝你好运。