编写搜索查询
语法
搜索语法与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
不是。大多数情况下,运算符应为大写形式。
未知字段 :当搜索查询中包含的字段在相关索引集中不存在时,会触发此警告。该判断基于数据流与索引集的关系。
参数错误 :当搜索查询中使用未声明的参数时,会出现此错误。 参数 需先定义才能用于搜索。