如何在 Opensearch 中搜索 @message 字段内的特定字段

问题描述 投票:0回答:1

我正在尝试过滤 msg 或 @message 部分下 dSId 字段为空白的所有记录。但是,无法找到任何能够执行此操作的特定查询。

如何在“msg”或“@message”部分中搜索以下记录的任何子字符串:

{
  "_index": "dummy-value",
  "_id": "1234",
  "_version": 1,
  "_score": null,
  "_source": {
    "level": 12,
    "time": "2023-08-22T03:48:31.692Z",
    "pid": 12,
    "hostname": "<value>",
    "reqId": "req-27h",
    "teamId": 8789,
    "msg": "This message:8789, wfId: b1550f15, aId: , dSId: , status: failed",
    "@id": "4356546",
    "@timestamp": "2023-08-22T03:48:31.693Z",
    "@message": "{\"level\":12,\"time\":\"2023-08-22T03:48:31.692Z\",\"pid\":12,\"hostname\":\"<value>\",\"reqId\":\"req-27h\",\"teamId\":8789,\"msg\":\"This msg: 8789, wId: b1550f15, accountId: , dSId: , status: failed\"}",
    "@owner": "54654",
    "@log_group": "logger",
    "@log_stream": "logger"
  },
  "fields": {
    "@timestamp": [
      "2023-08-22T03:48:31.693Z"
    ],
    "time": [
      "2023-08-22T03:48:31.692Z"
    ]
  }

我尝试使用exists过滤器搜索_source.msg.dSId,但它似乎不起作用,结果获取那些在两个部分中都有dSId字段值的记录。

还使用了基于正则表达式的过滤器,但也没有返回任何结果:

{
  "query": {
    "regexp": {
      "dSId": "[a-z][A-Z]*"
    }
  }
}
querydsl opensearch
1个回答
0
投票

由于您已经有一个摄取管道,因此您应该利用

key_value
处理器 来拆分
message
字段。

如果将以下内容添加到管道中,您应该能够轻松查询

dsId
字段:

  {
    "key_value": {
      "source": "msg",
      "field_split_characters": ",",
      "value_split_characters": ":",
      "delete_key_regex": "\\s",
      "delete_value_regex": "\\s"
    }
  }

然后您可以在

dsId
字段中查询空字符串
""
,如下所示:

{
   "query": {
      "term": {
         "dSId": ""
      }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.