我尝试在elasticsearch devtools 中创建正则表达式查询,但它似乎不起作用。 我正在关注网站上的文档:
我已经尝试了上述所有方法,但由于某种原因,似乎我做错了什么(显然是因为数据存在但未返回)或数据格式不正确。
这是我正在运行的文档:
{
"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 正则表达式标志示例 - 电子邮件
有人知道我做错了什么吗? 我试图在互联网上搜索有关建立查询时一切如何工作的解释,遗憾的是我空手而归。
希望有人能给我一个线索。
好吧,我花了一段时间,但我终于解决了我的问题! 阅读索引中所需的特定文档后,请执行以下操作:
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 从中提取数据的文档,并检查它是如何构建的。
感谢大家花时间阅读我的问题并尝试解决我的问题,非常感谢大家!
我希望这篇文章将来能够帮助其他人。