我正在尝试查询服务器日志。搜索正在返回结果,但是有两个问题。
1)我指定的是服务器名称,但我却获得了同一域中其他服务器的结果。
2)即使我指定查询从过去一小时返回结果,但它们还是从两个小时前返回,也就是说,如果我在下午1点执行搜索,则结果将从下午12点返回。如果我指定按时间戳排序,则搜索会返回正确的结果,但这似乎要花更长的时间才能显示结果,因此,我宁愿不这样做,除非必须这样做。
非常感谢您能提供的帮助。
这是我的查询(具有已修改的日志名称和服务器名称):
var searchParams = {
index: 'logs*',
"body": {
"from" : 0, "size": 50,
"sort": [
{
"timestamp": {
"order": "desc",
"unmapped_type": "boolean"
}
}
],
"query": {
"bool": {
"must": [
{
"match" : {"gl2_source_input" : "579f7b6696d78a4f6cbfa745"},
"match" : {"source" : "server01.fakedomain.com"},
"match" : {"EventID" : "5145"}
},
{
"range": {
"timestamp": {
"gte": "now-1h",
"lte": "now/m",
"time_zone": "-05:00"
}
}
}
],
"must_not": []
}
},
}
}
答案 0 :(得分:0)
这里有几件事:
如果要精确匹配关键字,请在term
类型字段上使用keyword
查询。
除非您对查询得分感兴趣,否则应使用filter
子句而不是must
子句。
因此您的查询可能看起来像这样(假设您的过滤器字段为keyword
类型的字段)。
var searchParams = {
index: 'logs*',
"body": {
"from" : 0, "size": 50,
"sort": [
{
"timestamp": {
"order": "desc",
"unmapped_type": "boolean"
}
}
],
"query": {
"bool": {
"filter": [
{ "term" : {"gl2_source_input" : "579f7b6696d78a4f6cbfa745"} },
{ "term" : {"source" : "server01.fakedomain.com"} },
{ "term" : {"EventID" : "5145"} },
{
"range": {
"timestamp": {
"gte": "now-1h",
"lte": "now/m",
"time_zone": "-05:00"
}
}
}
]
}
},
}
}