2017-05-26 11 views
0

特定のフィールド値によって異なる結果にする方法。例えば、私はgroup_idフィールドを持っており、私は同じgroup_idで複数の結果を取得したくありません。特定のフィールド値を持つアイテムを1つだけ取得します。

[{"name": "Eva", "group_id": "female"}, 
{"name": "Marina", "group_id": "female"}, 
{"name": "Raf", "group_id": "male"}, 
{"name": "Manvel", "group_id": "male"}] 

たとえば、これは私のドキュメントリストです。このリストから、男性は1人、女性は1人だけ必要です。だから私はフィールド "グループ"でグループ化し、そのグループに一致するものだけを取得する必要があると思う。私はこれが単純なものだと思うし、そのマッチを書く必要はない。ドキュメントでは、おそらくより複雑なケースの例があります。

enter image description here

+0

そして、あなたのクエリはうまくいかないのですか? –

+0

{ 'aggs':{ 'group_by_state':{ '用語':{ 'フィールド': 'グループ' }、 'サイズ':1 } } } –

+0

'サイズを使用しないでください:1 '。それを削除し、size:1の 'top_hits'を追加してください。私はずっと簡単に作成したサンプルクエリを更新しました。 –

答えて

1

terms集約のためのサブアグリゲーションとして使用top_hits集約。ドキュメントで見つけることのできる例:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search-aggregations-metrics-top-hits-aggregation.html#_example

POST /sales/_search?size=0 
{ 
    "aggs": { 
     "top_tags": { 
      "terms": { 
       "field": "group_id" 
      }, 
      "aggs": { 
       "top_one": { 
        "top_hits": { 
         "size" : 1 
        } 
       } 
      } 
     } 
    } 
} 
+0

私はこのドキュメントについて知っていますが、私にとってはそれだけでは不十分です。ここで書いたことを試してみました。うまくいきません。しかし、お返事いただきありがとうございます。 –

+0

あなたの元の投稿は私にとっても十分ではありません。だから、あなたの投稿を更新して、あなたが試したことと、正確には何がうまくいかないかを特に言及してください;-)。 –

+0

これも機能しません。私は 'top_tags'フィールドまたは 'top_one'を変更する必要がありますか? 私の実際のフィールド名は 'group_id'なので、正しいと思います。しかし、私は 'aggs'フィールドの下で残りを理解することはできません。 –

関連する問題