2016-06-13 12 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" 
       } 
      } 
     } 
     } 
    } 
} 

私はこのようなエラーが出る:

無効を用語集の順序パス[the_script_bucket]。未知の集約[the_script_bucket]

をしかし、私はthe_sumまたはthe_avgのような別の凝集をthe_script_bucketを変更すると、それが正常に動作します。 the_script_bucketはパイプライン集約であると確信していますが、用語をthe_script_bucketに基づいてソートする必要があります。たとえば、100,000個のドキュメントの上位10個の値を表示できます。それは可能ですか?それはこのようになります

答えて

0

アップデートです:それは、パフォーマンス上の問題のために、絶対に不可能です。私たちは、水平方向のみにスケーラブルであるElasticsearchする機能を追加

問題は、次のような理由のため閉鎖されています。 50GBのデータを持つラップトップ上の1つのノードまたは50PBのデータを持つデータサーバー内の1000個のノードを実行している場合は、何を追加しても問題ありません。

すべてのシャードのすべての用語をフェッチすることは水平方向には行われないため、追加しません。

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

あなたは、クライアント側でこれを実行する必要があります。その後、それらを自分で並べ替え、(あなたはそれが戻ってくるどのくらいのアイテム、事前に知っておくべきこと)すべてのバケットを取得。完全に反生産的、私は知っている。がんばろう。

関連する問題