首页 > 解决方案 > 如何在 Kibana 中搜索对象数组?

问题描述

我们有以这种格式进入 Kibana 的日志:

{
  "starttime": "2019-04-07T23:31:07.855Z",
  "maxlevel": "ERROR",
  "messages": [
    {
      "time": "2019-04-07T23:31:07.861Z",
      "level": "ERROR",
      "message": "[application.controllers.RestApiController] no_staff_member Please identify yourself"
    },
    {
      "time": "2019-04-07T23:31:07.862Z",
      "level": "INFO",
      "message": "[application.controllers.RestApiController] received request"
    }
  ]
}

如何在 Kibana 中编写查询来搜索 messages.message 包含“no_staff_member”的任何日志条目?

我努力了:

  1. messages.message:no_staff_member
  2. messages.message:/.*no_staff_member.*/

标签: elasticsearchkibana

解决方案


需要直接在messages字段中查询,它会对该字段进行全文查询,不能在数组上的字段内部进行查询。

文档中:

对象数组不会像您期望的那样工作:您不能独立于数组中的其他对象查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套数据类型而不是对象数据类型。

如果您将字段映射为嵌套字段,或者在弹性搜索索引之前对数据进行非规范化,则可以更改它。


推荐阅读