我有以下弹性搜索索引结构:
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
想法是插入带有操作的记录:'打开'对于每个user_id-message_id,缺少带有操作的记录:'打开'。为此,我需要获得所有user_id-message_id关联,只要他们没有采取行动:' open'已经
是否可以创建一个返回不同user_id-message_id记录的查询,不包括user_id-message_id,如果表中还包含action with record:open和相同的user_id-message_id关联?
预期结果:
5| click| 2| 1
7| click| 3| 2
答案 0 :(得分:1)
嗯,您可以通过查询和topN hits聚合方面的小脚本来实现这一点。
{
"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
}
}
}
}
}
}