2017-04-14 8 views
0

私はElasticSearchの問題を抱えています。ElasticSearch:フィルタリングされたユニークなレコードの集計

私はフィルタリングされたデータセットから一意のドキュメントを取得しようとしており、その上に集計を行っています。

我々のデータセットは次のようになります。.. IDオブジェクトプロパティ1 Property2 12 123 Test1をFest2 23 234 Test3はFest4 5 123 Test1をFest2 55 123 Test2をFest4 3 234 Test2をFest2

I property2に基づいてデバイスをフィルタリングし、一意にフィルタリングされたレコードのproperty1に集約(グループ化)することができます。 誰かが私にこれを助けることができますか?

一意のレコードをフィルタリングして取得する。

{ 
"size": 0, 
"query": { "match": { "Property2": "Fest2" }}, 
"aggs": { 
    "Unique-Object": { 
     "terms": { 
     "field": "object.keyword", 
     "size": 20 
}, 
"aggs": { 
    "top_uids_hits": { 
      "top_hits": { 
      "sort": [ 
       { 
       "_score": { 
        "order": "desc" 
       } 
       } 
      ], 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
}' 

私は上記のDSLの出力に次のようにプロパティ1でグループに好きでした...この上でしたいくつかのいずれかスローライトを?

グループプロパティ1

"aggs": { 
"Property1_count": { 
"terms": { 
"field": " Property1.keyword" 
} 

おかげ アルンS

+0

あなたの要件に合わせてSQLクエリを作成できますか?それであなたの質問は明確になりますか? 。 –

+0

ありがとうございます。生のSQLクエリは、このようなものです。.. select count(DISTINCT id)where Property2 = 'xxx' group by property1 – Manoj

+0

私の答えが更新されました。私はIDとプロパティ1で2つのグループを使うべきだと思います。テストデータで確認してください。私は私のシステムでテストしました。 –

答えて

0

によっては、私はこれがあなたのクエリされるべきだと思います。これを使用してチェック、agg inside agg: - カーディナリティの使用link

{ 
    "_source":false, 
    "query": { 
     "match": { 
      "Property2": "xxxx" 
     } 
    }, 
    "aggregations": { 
     "byProperty1": { 
      "terms": { 
       "field": "property1" 
      }, 
      "aggs": { 
       "byId": { 
        "cardinality": { 
         "field": "id" 
        } 
       } 
      } 
     } 
    } 
} 

Javaの実装については、answerを確認してください。 この質問グループを複数のフィールドlinkでチェックしてください。

関連する問題