2016-12-08 6 views
1

商品のドキュメントがあります。製品は次のようになります。条件を満たすセット(別個の値のリスト)

{ 
    "_index": "1", 
    "_type": "product", 
    "_id": "1", 
    "_source": { 
     "group": "g1" 
     "exist": true 
    } 
} 

私は(すべての製品の)グループのリストを取得しようとしている - しかし、これらのみどのように"exist" == true(少なくとも1つの既存の製品を持つグループ)

は私がしまし満たします試してみました:

(も冗長であり、CALCに余分な時間を要する可能性がある)自分のカウントでグループのリストを返すが、私は "exist"=trueの条件/クエリを追加しようとしています
{ 
    "size": 0, 
    "aggs" : { 
     "_source" : { 
      "terms" : { 
      "field" : "group" 
      } 
     } 
    } 
} 

  1. どうすれば実現できますか?
  2. 本当に集計が必要ですか? (より効率的な方法は何ですか?)

注:trueショーアップを存在すると私はグループのみを確実にする観点から集約へFiltered aggregationの追加弾性検索1.4

答えて

1

を使用しています。 は、性能が「グループ」フィールドが「分析さ」されていません

例を確実に改善するには、次の者は、グループのリストを返しますが、それも数える

{ 
    "size": 0, 
    "aggs": { 
     "exist_group": { 
     "filter": { 
      "term": { 
       "exist": "true" 
      } 
     }, 
     "aggs": { 
      "groups": { 
       "terms": { 
        "field": "group" 
       } 
      } 
     } 
     } 
    } 
} 
+0

- 冗長な作業です。私は何千もの文書を持っていて、時間がかかりました。カウントダウンしない方法があるのだろうか(私は 'カーディナリティ'を見つけましたが、それを表示せずに別のグループの数を返します) – ItayB

+0

私の推測は、インデックス作成時に計算されます。パフォーマンスを向上させるために、 "グループ"フィールドが "分析"されていないことを確認してください。 – keety

+0

まだパフォーマンスに問題がある場合は、フィールドデータをペルロードするか、 "グループ"フィールドに明確な用語がない場合は、フィールドデータをプリロードするこの文書には便利なヒントがあります – keety

関連する問題