2016-08-19 5 views
0

フィールドの値が複数の文書で同じ場合、文書の数が必要です。これを行うにはどうすればDSLクエリを書くことができますか?同じ値を持つ複数の文書が存在する場合の弾性検索カウント

例:

のは、私はこれらの文書を持っているとしましょう:

{ _id:1, foo:1} 
{ _id:2, foo:1} 
{ _id:3, foo:3} 
{ _id:4, foo:2} 
{ _id:5, foo:3} 

のfooの同じ値が複数の文書に発見された場合、私は、文書のカウントをしたいです。ここでは、私が欲しいのカウントは2。

UPDATE

として用語のクエリを実行した後のように:私は別のフィールドをしたい

'aggregations':{ 
    'counts':{ 
     'buckets':[ 
      {'doc_count': 221,'key': '10284'}, 
      {'doc_count': 71,'key': '6486'}, 
      {'doc_count': 71,'key': '7395'} 
     ], 
     'doc_count_error_upper_bound': 0, 
     'sum_other_doc_count': 0 
    } 
} 

{ 
    "size": 0, 
    "aggs": { 
     "counts": { 
      "terms": { 
       "field": "foo" 
      } 
     } 
    } 
} 

私はこの結果を得ましたtotal_countとして値3を持ちます.3つのキーがあり、1より大きいdoc_countがあります。どうすればいいですか?

+0

私はあなたがESでボックスの外でこれを行うことはできないと思う。 'min_doc_count:2' 'terms'集計の後に基本的にバケットカウントが必要です。 –

+0

ES 5には、https://github.com/elastic/elasticsearch/issues/19553があります( 'bucket_selector'集約には、使用可能な' _bucket_count'変数があります)。その変数が他のスクリプトでも使用できるかどうかはまだ分かりません。 –

+0

新しい '_bucket_count'変数@AndreiStefanに言及した良い点 – Val

答えて

1

あなたはこのようfooフィールド上の簡単なterms凝集を試すことができます。

{ 
    "size": 0, 
    "aggs": { 
     "counts": { 
      "terms": { 
       "field": "foo" 
      } 
     } 
    } 
} 

これを実行した後、あなたはキー1のため

  • を取得します:キーのdoc_count 2
  • 3:doc_count 2
  • キー1の
  • :doc_count 1
+0

私は単に2を得る方法はありますか?毎日このようなドキュメントの数を見つけるために日付ヒストグラムを使ってこのクエリを実行し、1日に各キーが数万になる可能性があるので、これを行う必要があります。 –

+0

クエリを実行して取得した結果を確認し、その結果からどのフィールドを取得するかを説明できますか? (あなたの質問をその情報で更新してください) – Val

+0

質問が更新されました。どうぞご覧ください。 –

0

私はあなたがESでボックスの外でこれを行うことはできないと思う。基本的には、min_doc_count: 2termsアグリゲーションの後にバケットカウントが必要です。

あなたはこれを持っています:https://github.com/elastic/elasticsearch/issues/19553bucket_selectorの集約では、使用可能な変数_bucket_countがあります)。その変数が他のスクリプトでも使用できるかどうかはまだ分かりません。

関連する問題