我有以下 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”的记录。为此,仅当所有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
最佳答案
好了,您可以通过在查询和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
}
}
}
}
}
}
关于elasticsearch - Elasticsearch:如果存在其他记录,则排除结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326265/