0

我有以下弹性搜索索引结构:

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' 的记录。为此,我需要获取所有 user_id-message_id 关联,前提是它们还没有 action:'open' 。

如果表也有带有 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

好吧,您可以通过在查询和topN 命中聚合方面编写少量脚本来实现这一点。

{
  "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 回答