You need to enable JavaScript to run this app.
导航

查询字符串语法

最近更新时间2023.11.14 19:17:37

首次发布时间2023.10.24 19:47:33

在日志服务数据加工函数中,字符串语法用于指定检索规则和数据过滤的方式。本文档介绍数据加工函数中的查询字符串语法通用规则。

适用范围

在使用以下数据加工函数时,您可以通过查询字符串语法过滤数据。

类型

函数

场景

事件检查函数

f_search

使用查询字符串判断指定事件的字段值是否满足指定的条件。

功能概览

查询字符串语法支持检索关键词、模糊匹配等功能,键值检索和全文检索模式对不同搜索功能的支持情况如下表所示。

功能

键值检索

全文搜索

关键词检索

支持

支持

模糊匹配

支持

支持

完全匹配

支持

不支持

正则表达式匹配

支持

不支持

数值比较与范围判断

支持

不支持

逻辑关系判断

支持

支持

字段判断

支持

不支持

特殊字符转义

在字符串查询语法中,需要对一些特殊字符进行转义操作。需要转义的特殊字符包括星号(*)、冒号(:)、括号(())、单引号('')、双引号("")、问号(?)、波浪号(~)等。转义的方式包括:

转义方式

说明

字段名转义

字段名包含特殊字符时应使用反斜线(\)转义。例如 new\*:content\(path\)\?: api
如果字段名为中文,则应用双引号包裹,例如 e_search('"中文字段":"中文值"')

搜索值转义

搜索值如果包含特殊字符,应使用反斜线(\)转义。例如 e_search('content:a\*b') 表示使用反斜线对星号转义。

关键词检索

检索方式

说明

全文检索

在所有字段值中搜索指定字符串。搜索中文关键词时需要加引号("")。
语法格式如下:

f_search('关键词1')

示例如下:

  • f_search('"中文字符"'):搜索指定字符串 中文字符
  • f_search('"byte dance"'):搜索的关键词中包含空格。
  • f_search('byte dance'):搜索多个关键词,其中不同关键词之间默认为 OR 关系。

键值检索

在某个字段的所有值中搜索指定字符串。
语法格式如下:

f_search('key:value')

示例如下:

  • f_search('method: get'):判断 method 字段的值中是否包含关键词 get
  • f_search('company: "volc engine"'):判断 company 字段的值中是否包含关键词 volc engine,该关键词中包含空格。
  • f_search('company: volc engine'):等同于 f_search('company: volc OR engine'),即判断 company 字段的值中是否包含关键词 volc,或日志全文中是否包括 engine

模糊匹配

查询字符串语法支持模糊匹配,即通过通配符进行匹配。目前支持的通配符包括:

  • 星号(*):零个或多个字符串。
  • 半角问号(?):一个字符,或一个中文字符等宽字符。

模糊匹配的语法如下:

检索方式

说明

全文检索

在所有字段中进行模糊匹配。
语法格式如下:

f_search('关键词*')

示例如下:

  • f_search('dance*'):搜索以 dance 开头的所有字符串,例如 dancers。
  • f_search('dance?'):搜索以 dance 开头的 6 位字符串,例如 dancer。

键值检索

在指定字段的字段值中进行模糊匹配。
语法格式如下:

f_search('key:value*')

示例如下:

  • f_search('company: byt*dance'):匹配零或多个字符。
  • f_search('company: tik?ok'):匹配一个字符。

完全匹配

查询字符串语法支持完全匹配,即字段值从开始到结尾应和指定字符串完全匹配。

  • 语法格式:

    f_search('key==value')
    
  • 示例: f_search('company== "byte dance"')company 字段的值应完全等于 byte dance

正则表达式匹配

查询字符串语法支持正则表达式匹配,即通过正则表达式匹配指定字段的字段值。

  • 语法格式:

    f_search('key~=正则表达式')
    
  • 语法说明:

    • 正则表达式中如果包含反斜线(\),应使用双引号包裹。
    • 正则表达式匹配默认为部分匹配,如果需要完全匹配字段值,需要在正则式开头和结尾处分别添加^$,例如^\d+$
  • 示例:

    • f_search('path~= "\d+"'):path 字段值中包含数字。
    • f_search('id~= "^\d+$"'):id 字段值为数字格式。

数值比较与范围判断

查询字符串语法支持数值比较和数值范围判断。支持的对比符包括 >>==<<=

功能

说明

数值比较

将指定字段的值和某个数值进行大小对比。
例如:

f_search('count >= 9')  #  >=9
f_search('count > 9')   #  > 9
f_search('count = 9')   #  = 9
f_search('count <= 9')  #  <=9
f_search('count < 9')   #  < 9

数据范围判断

将指定字段的值和某个数值范围进行对比。数值范围应为闭区间。
例如:

f_search('age: [1, 18]') # >=1 and  <=18

逻辑关系

对多个搜索结果进行逻辑关系判断,支持通过圆括号()调整逻辑关系的对比顺序。

逻辑关系

关键字

AND&& 等,只支持大写。

OR|| 等,只支持大写。

NOT! 等,只支持大写。

示例如下:

f_search('byte OR dance') # 逻辑关系运算符应为大写
f_search('byte AND (dancer OR dance)')
f_search('byte AND  ( NOT dancer OR tiktok)')
f_search("byte && dance")    # AND
f_search("byte || dance")    # OR
f_search("byte || !dance")   # OR NOT

字段判断

使用搜索字符串对字段进行判断。
示例如下:

  • f_search('field:*'):判断字段 field 存在。
  • f_search('NOT field:*'):判断字段 field 不存在。
  • f_search('field~=".+"'):判断字段 field 存在。
  • f_search('NOT field~=".+"'):判断字段 field 不存在。