You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kibana界面Regex查询失效求助:筛选SQL执行超1秒日志

日志搜索问题排查与解决

问题详情

现有日志内容:

queryResults: time: 0.079 / 0 rows: 165 sql: select * from ( ( select name, sum(age) as total,
queryResults: time: 10.079 / 0 rows: 165 sql: select * from ( ( select name, sum(age) as total,
queryResults: time: 1.079 / 0 rows: 165 sql: select * from ( ( select name, sum(age) as total,

使用的搜索参数:

message: "select * from ( ( select name, sum(age) as total,"

当前设置的过滤器:

{
  "query": {
    "regexp": {
      "message.keyword": "/time: [1-9].+/"
    }
  }
}

该正则表达式在测试环境可正常匹配,但在Elasticsearch UI中无法生效,期望仅筛选出SQL执行时间超过1秒的日志。

解决方案

核心问题

Elasticsearch的regexp查询不需要用斜杠/包裹正则表达式,这是和常规正则测试工具的关键区别。此外原正则的匹配逻辑不够精准,可能导致误匹配或漏匹配。

修正后的过滤器配置

1. 基础正则修正

去掉正则前后的斜杠,同时调整正则以准确匹配时间≥1的场景:

{
  "query": {
    "regexp": {
      "message.keyword": "time: (?:[1-9]\\d*|1)\\.\\d+"
    }
  }
}
  • 正则说明:
    • (?:[1-9]\\d*|1):匹配整数部分为1或大于1的数值(如1、10、25等)
    • \\.\\d+:匹配小数点后的任意数字

2. 复合查询(同时匹配指定SQL+时间过滤)

如果需要同时保留原搜索参数(匹配指定SQL语句)和时间过滤逻辑,使用bool查询组合条件:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "select * from ( ( select name, sum(age) as total,"
          }
        },
        {
          "regexp": {
            "message.keyword": "time: (?:[1-9]\\d*|1)\\.\\d+"
          }
        }
      ]
    }
  }
}

3. 更优方案:提取独立时间字段

若日志在索引时能将time值提取为单独的数值类型字段(如execution_time,类型设为float),可直接使用范围查询,性能远高于正则匹配:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "select * from ( ( select name, sum(age) as total,"
          }
        },
        {
          "range": {
            "execution_time": {
              "gt": 1
            }
          }
        }
      ]
    }
  }
}

内容的提问来源于stack exchange,提问作者Joy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:10:29