2017-01-12 2 views
2

以前の結果セットに基づいて1つのインデックスから個々のドキュメントのカウントを返すことができるようにしたいと思いますそれぞれ別のクエリを実行することなく実行できます。だから、弾性検索を使用して一意の識別子に基づいたフロー/ファンネルの結果を作成

、このようなデータセット(私のESドキュメントの簡易版)与えられた:私がやりたい何

{ 
    "name": "visit", 
    "sessionId": "session1" 
}, 
{ 
    "name": "visit", 
    "sessionId": "session2" 
}, 
{ 
    "name": "visit", 
    "sessionId": "session3" 
}, 
{ 
    "name": "click", 
    "sessionId": "session1" 
}, 
{ 
    "name": "click", 
    "sessionId": "session3" 
} 

name: visitを検索し、すべての人々の数を与えることができるようです。その部分は簡単です。しかし、のsessionIdの結果セットを持つname: clickのドキュメントを数えて、name: clickの数と、name: visitの数のカウントを返すこともできます。

これを行う簡単な方法はありますか?私は集約APIを見てきましたが、それらはすべて自分のニーズに合っていないようです。また、親子関係があるようですが、私が個別にカウントしたい両方のドキュメントが同じタイプであるため、私の状況には当てはまりません。

期待される結果は、このようなものになるだろう:一見

{ 
    "count": { 
     // total number of visit events since this is my start point 
     "visit": 3, 

     // the amount of click results that have sessionId 
     // matching my previous search's sessionId values 
     "click": 2 
    } 
} 
+2

上記のサンプルデータで期待される結果を表示できますか? – Val

+0

@Val確かに、私の元の投稿に追加! – fiiv

+1

一見すると、セッションIDを取得するための最初の集約クエリと、セッションIDを使用してフィルタリングされた2番目の集計クエリの2つのクエリでこれを行う必要があります。これらの2つのクエリを実行するのは大したことではありません。 – Val

答えて

1

、あなたは2つのクエリでこれを実行する必要があります。

  1. sessionIdsと
  2. を取得するための第1の集約クエリこれらのセッションIDでフィルタリングされてクリック数を検出する第2の集約クエリ。

これらの2つのクエリを実行するのは大したことではありませんが、データの量と一度に取得するセッションIDの数によって異なります。

関連する問題