2016-08-08 9 views
1

Elasticsearchで集計に関する情報を取得しようとしています。Elasticsearchはすべてのデータを取得せずに集計バケットサイズ(バケット内の要素数)を取得します

私はメールのメタデータ(送信者のIP、件名など)を格納するインデックスを持っています。私がしようとしているのは、1000個以上のメールを送信するIPの数を取得することです。 (例えばだから2000件のメールが第三IPから及び200から最初のIP、1500から送信された、我々は3つのIPアドレスを持っているとしましょう。それから私は、集計結果としてを見たいと思っています。)私は、次のクエリを書いた:

GET /my_index/_search 
{ 
    "size": 0, 
    "aggs": { 
     "ipAddresses": { 
     "terms": { 
      "field": "senderIpAddress", 
      "min_doc_count": 1000, 
      "size" : 0 
     } 
     } 

    } 
} 

私はバケツを取得し、しかし、私はこれを行うために、バケット内のすべてのデータを取得する必要があり、私のバックエンドの実装では、そのサイズを計算することができます。それは遅く、すべてのデータを取得せずにバケットサイズを取得したい。

TL; DR、データ全体を取得せずに集計バケットの合計サイズを取得するにはどうすればよいですか。

+0

私は今、正確な問題を抱えています。これに対する解決策はありますか? – LLS

答えて

0

これはcardinality凝集の目的である:

{ 
"size": 0, 
"aggs": { 
    "ipAddressesCount": { 
     "cardinality": { 
      "field": "senderIpAddress" 
     } 
    } 
    } 
} 

は、それが近似であることに留意してください - 上記のリンクに記載されているように精度がprecision_thresholdを用いて構成することができます。

+0

私は基数の集約が何であるか知っています。私が言及した内容を注意深く読んだら、1000件以上のメールが送信されたIPアドレスの数を見たいと思う。単純なカーディナリティを作成した場合、その日の終わりに、1000件未満のメールが送信されたIPアドレスがカウントされます。 – user2604150

関連する問題