0

私は次のelasticsearchインデックス構造を持っています:

id|action|user_id|message_id
 1| click|      1|         1
 2|  open|      1|         1
 3| click|      2|         1
 4|  open|      2|         1
 5| click|      1|         2
 6| click|      1|         2
 7| click|      3|         2

アイデアは、action:'open' を持つレコードが欠落しているすべての user_id-message_id に対して、action:'open' を持つレコードを挿入することです。そのためには、action:'open' がまだない場合にのみ、すべての user_id-message_id 関連付けを取得する必要があります。

テーブルにも action:open と同じ user_id-message_id 関連付けを持つレコードがある場合、user_id-message_id を除く個別の user_id-message_id レコードを返すクエリを作成することは可能ですか?

期待される結果:

 5| click|      2|         1
 7| click|      3|         2
4

1 に答える 1

1

これは、クエリと上位 N ヒットの集計に関するスクリプトを少し作成するだけで実現できます。

{
  "query": {
    "filtered": {
      "filter": {
        "not": {
          "term": {
            "action": "open"
          }
        }
      }
    }
  },
  "aggs": {
    "keys": {
      "terms": {
        "script": "doc['message_id'].value + doc['user_id'].value"
      },
      "aggs": {
        "results": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}
于 2015-03-29T08:29:27.680 に答える