elasticsearch Elasticsearch查询-每个用户的最新日志,用于字段logtype=';x';,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch Elasticsearch查询-每个用户的最新日志,用于字段logtype=';x';,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch Elasticsearch查询-每个用户的最新日志,用于字段logtype=';x';

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

我正在尝试查询elasticsearch以获取所有用户ID的最新日志,其中每个用户只包含一个日志,字段为logtype='x'

如果logtype='x',则每个用户标识获取1个日志,其中此日志的日期是每个用户标识的最近日期

日志示例:{“logtype”=“x”,“number”:232423,“userID”:123,“time”:“2021-02-03T20:25:44.603045+05:30”}


如何创建此查询?

假设您的索引映射如下所示:

{
  "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”,对不起,我不懂。它已经在这么做了。