跳至主内容

编写搜索查询

语法

搜索语法与Lucene语法高度相似。默认情况下,若未指定搜索的消息字段,则所有消息字段均会被纳入搜索范围。

包含术语的消息 ssh :

ssh

包含术语的消息 ssh login :

SSH登录

包含确切短语的消息 ssh登录 :

"ssh登录"

字段 类型 包含 ssh :

类型:ssh

字段 类型 包含 ssh 登录 :

类型:(ssh OR 登录)

字段 类型 包含确切短语 ssh登录 :

类型:"ssh登录"

包含字段 类型 :

_exists_:类型

不包含字段 类型 :

NOT _exists_:类型

匹配正则表达式的消息 ethernet[0-9]+ :

/ethernet[0-9]+/

默认情况下所有术语或短语均为OR连接,因此所有至少匹配一项的消息都会被返回。您可以使用 布尔运算符和分组 进行控制:

"ssh登录" AND 来源:example.org 
("ssh登录" AND (来源:example.org OR 来源:another.example.org)) OR _exists_:always_find_me

您也可以使用NOT运算符:

"ssh登录" AND NOT 来源:example.org 
NOT example.org

请注意AND、OR和NOT区分大小写,必须全部大写。

通配符: 使用 ? 替换单个字符,或使用 * 替换零个或多个字符:

来源:*.org 
来源:exam?le.org 
来源:exam?le.*

请注意前导通配符已被禁用,以避免内存过度消耗! 您可以在 安全数据湖 配置文件中启用它们:

allow_leading_wildcard_searches = true

还需注意 消息 , 完整消息 ,以及 source 是默认情况下仅被分析的字段。虽然通配符搜索(使用 *? )适用于所有索引字段,但被分析字段的行为会略有不同。详见 通配符与正则表达式查询

模糊匹配: 您可以搜索相似术语:

ssh logni~ source:exmaple.org~

此示例采用 Damerau–Levenshtein距离算法 ,默认距离为 2 ,将匹配“ssh login”和“example.org”(查询中故意拼写错误)。

您可如下调整距离:

source:exmaple.org~1

还可使用模糊运算符进行 近似度 搜索,其中短语中的术语可存在不同/模糊间距且无需严格按定义顺序排列:

"foo bar"~5

数值字段支持 范围查询 。方括号范围是闭区间,花括号是开区间,甚至可组合使用:

http_response_code:[500 TO 504]
http_response_code:{400 TO 404}
bytes:{0 TO 64]
http_response_code:[0 TO 64]

还可组合无界范围运算符:

http_response_code:(>=400 AND <500)

可对 范围查询 针对日期字段进行范围查询时,时间选择器所选时段必须与您要搜索的时间范围相匹配。例如若搜索过去5分钟的数据,但实际搜索时间是一周前,则查询不会返回任何结果。日期必须采用UTC格式且形如 安全数据湖 显示的格式:

时间戳:["2019-07-23 09:53:08.175" TO "2019-07-23 09:53:08.575"]

安全数据湖 为时间戳字段定制了索引映射,以 YYYY-MM-DD HH:MM:SS.sss 格式存储日期。若某额外字段被Elasticsearch识别为日期并采用默认格式(即 YYYY-MM-DD HH:MM:SS.sss ),则该时段的搜索应表示为:

其他日期字段:["2019-07-23T09:53:08.175" TO "2019-07-23T09:53:08.575"]

至少在Elasticsearch 6.x版本中,您可以在时间范围内包含时区信息。查询示例如下:

其他日期字段:["2020-07-29T12:00:00.000-05:00" TO "2020-07-30T15:13:00.000-05:00"]

日期查询还可设置为动态模式,始终回溯指定时段:

其他日期字段:[当前时间-5天 TO 当前时间-4天]

转义规则

以下字符必须使用反斜杠转义:

& | : \ / + - ! ( ) { } [ ] ^ " ~ * ?

示例:

资源:\/文章\/45326

错误类型

输入查询语句时请注意警告和异常提示。若输入 安全数据湖 无法理解的查询,系统会显示黄色感叹号图标及警告/异常信息,包括:

解析异常 :当出现解析错误时触发此异常。通常由搜索查询语法错误导致,错误信息会包含语法错误位置的具体说明。

无效运算符 :当运算符拼写错误时出现。例如 AND 是一个有效的运算符,但 and 不是。大多数情况下,运算符应为大写形式。

未知字段 :当搜索查询中包含的字段在相关索引集中不存在时,会触发此警告。该判断基于数据流与索引集的关系。

参数错误 :当搜索查询中使用未声明的参数时,会出现此错误。 参数 需先定义才能用于搜索。