Elasticsearch Devtools 查询(正则表达式/通配符)- 不工作

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

我尝试在elasticsearch devtools 中创建正则表达式查询,但它似乎不起作用。 我正在关注网站上的文档:

Elasticsearch 正则表达式

Elasticsearch 通配符

我已经尝试了上述所有方法,但由于某种原因,似乎我做错了什么(显然是因为数据存在但未返回)或数据格式不正确。

这是我正在运行的文档:

{
  "took": 2036,
  "timed_out": false,
  "_shards": {
    "total": 287,
    "successful": 287,
    "skipped": 256,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10000,
      "relation": "gte"
    },
    "max_score": 12.63081,
    "hits": [
      {
        "_index": "winlogbeat-7.15.1-2024.02.29-000029",
        "_id": "GD98kI4BzHuLoaiyJTrr",
        "_score": 12.63081,
        "_source": {
          "message": """Timestamp: 30/03/2024 20:50:37

Message:  ProposalId-7389995 ,MyDomain-New , ABC-3128661328
Time to prepare objects before deleting: 0 ms
Before <FillMany>: 0 ms
After <FillMany>: 5555 ms
After deleting(records): 5555 ms

Category: Warning
Priority: 1
EventId: 1
Severity: Warning
Title:
Machine: MyServer
App Domain: /MyDomain/ServiceName/Machine-133562274298846072
ProcessId: 9999
Process Name: c:\windows\system32\cmd.exe
Thread Name:
Win32 ThreadId:1234
Extended Properties: """
        }
      }
    ]
  }
}

这是我正在尝试运行的查询: 正则表达式

GET /_search
{
  "_source": ["message"],
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "@timestamp": {
              "gte": "2024-01-01",
              "lte": "2024-08-20"
            }
          }
        },
        {
          "regexp": {
            "message": "After\\ \\<FillMany\\>:\\ [2-9][0-9]{3,}\\ ms"
          }
        }
      ]
    }
  }
}

对于正则表达式,我还尝试了以下方法:

"message": "After \\<FillMany\\>: [2-9][0-9]{3,}.*"

就像参考页面上的一样: Elasticsearch 正则表达式标志

事件尝试添加标志(如此链接所示): Elasticsearch 正则表达式标志示例 - 电子邮件

有人知道我做错了什么吗? 我试图在互联网上搜索有关建立查询时一切如何工作的解释,遗憾的是我空手而归。

希望有人能给我一个线索。

elasticsearch
1个回答
0
投票

好吧,我花了一段时间,但我终于解决了我的问题! 阅读索引中所需的特定文档后,请执行以下操作:

Get <index name>/_doc/<_id>

例如:

{
   "_index": "winlogbeat-8.12.1-2024.01.01-00001",
   "_id": "12345678",
   etc...
}

我注意到我的“消息”字段实际上是:

{
    "event_date": {
        "param1": <all my message details>
    }
}

所以我所要做的很简单:

GET /_search
{
  "_source": ["message"],
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "@timestamp": {
              "gte": "2024-01-01",
              "lte": "2024-08-20"
            }
          }
        },
        {
          "regexp": {
            "winlog.event_data.param1": "After \\<FillMany\\>: [2-9][0-9]{3,}.*"
          }
        }
      ]
    }
  }
}

这解决了我的问题,我试图从不存在的字段中提取数据!

我的建议是始终获取您想要使用 id 从中提取数据的文档,并检查它是如何构建的。

感谢大家花时间阅读我的问题并尝试解决我的问题,非常感谢大家!

我希望这篇文章将来能够帮助其他人。

© www.soinside.com 2019 - 2024. All rights reserved.