elasticsearch - Elasticsearch 查询结果返回错误结果
问题描述
我正在尝试查询服务器日志。搜索正在返回结果,但存在一些问题。
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": []
}
},
}
}
解决方案
这里有几件事:
如果要精确匹配关键字,请在类型字段上使用
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"
}
}
}
]
}
},
}
}
推荐阅读
- java - Android RxJava 在单独的线程中处理 http 响应行
- ios - 将 CVPixelBuffer 转换为 OpenGL ES 纹理
- c# - 使用不同线程中提供的 IHubContext 与 SingalR 客户端连接
- sql - SQL 命令未正确结束联合
- python - 使用 python-firestore AsyncClient,与 firebase
- c++ - 我可以使用位字段在 C++ 中将 2 * 12 位无符号数字存储为 3 个字节吗?
- java - 如何对 Java 地图内的列表进行排序?
- python - 根据空列条件拆分数据框
- android - 不显示卡详细信息输入弹出窗口而不是显示错误“您请求的项目对您不可用”计费客户端 android
- python-3.x - 在 Ubuntu 20.04 - python3 -m easy_install --script-dir /opt/aws/bins aws-cfn-bootstrap-latest.tar.gz