首页 > 解决方案 > 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": []
            }
        },

    }

}

标签: elasticsearch

解决方案


这里有几件事:

  1. 如果要精确匹配关键字,请在类型字段上使用term查询。keyword

  2. 除非您对查询的评分感兴趣,否则您应该使用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"
                            }
                        }
                    }
                ]
            }
        },

    }
}

推荐阅读