elasticsearch Elasticsearch查询-每个用户的最新日志,用于字段logtype=';x';
我正在尝试查询elasticsearch以获取所有用户ID的最新日志,其中每个用户只包含一个日志,字段为logtype='x' 如果logtype='x',则每个用户标识获取1个日志,其中此日志的日期是每个用户标识的最近日期 日志示例:{“logtype”=“x”,“number”:232423,“userID”:123,“time”:“2021-02-03T20:25:44.603045+05:30”}elasticsearch Elasticsearch查询-每个用户的最新日志,用于字段logtype=';x';,elasticsearch,kibana,elasticsearch,Kibana,我正在尝试查询elasticsearch以获取所有用户ID的最新日志,其中每个用户只包含一个日志,字段为logtype='x' 如果logtype='x',则每个用户标识获取1个日志,其中此日志的日期是每个用户标识的最近日期 日志示例:{“logtype”=“x”,“number”:232423,“userID”:123,“time”:“2021-02-03T20:25:44.603045+05:30”} 如何创建此查询?假设您的索引映射如下所示: { "properties&qu
如何创建此查询?假设您的索引映射如下所示:
{
"properties" : {
"logtype" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"number" : {
"type" : "long"
},
"time" : {
"type" : "date"
},
"userID" : {
"type" : "long"
}
}
}
您将需要以下聚合:a按a的结果排序,再加上a以获取每个用户标识的最新日志:
POST logs/_search
{
"size": 0,
"query": {
"match": {
"logtype": "x"
}
},
"aggs": {
"by_user_id": {
"terms": {
"field": "userID",
"size": 1,
"order": {
"latest_date": "desc"
}
},
"aggs": {
"latest_date": {
"max": {
"field": "time"
}
},
"latest_log": {
"top_hits": {
"size": 1,
"sort": [
{
"time": {
"order": "desc"
}
}
]
}
}
}
}
}
}
请包括一个示例日志条目——采用您用于将其插入ES的格式。我添加了一个示例日志。这就是你所需要的吗?看一下collapse:top_hits()也能帮上忙谢谢。这与我试图做的很接近,但是当我运行它时,我会得到具有相同用户ID的日志,并且我试图每个用户获得一个日志。你知道为什么吗?不客气。但这不是重点吗?如果您希望每个用户ID都有一个日志,那么首先需要根据ID对它们进行分组。或者?我应该如何首先修改此查询以按用户ID分组?我以为你已经在用这个零件做了。“aggs”:{“by_user_id”:{“terms”:{“field”:“userID”,对不起,我不懂。它已经在这么做了。