编写搜索查询
语法
搜索语法与Lucene语法高度相似。默认情况下,若未指定消息字段,所有消息字段都将纳入搜索范围。
包含术语的消息 ssh :
ssh
包含术语 ssh 或 login :
ssh登录
包含精确短语 ssh登录 :
"ssh登录"
字段 type 包含 ssh :
type:ssh
字段 type 包含 ssh 或 login :
type:(ssh OR login)
字段 type 包含精确短语 ssh登录 :
type:"ssh登录"
包含字段 type :
_exists_:type
不包含字段 type :
NOT _exists_:type
匹配正则表达式
ethernet[0-9]+
:
/ethernet[0-9]+/
默认情况下所有术语或短语以OR逻辑连接,因此至少命中一个条件的消息都会被返回。您可以使用 布尔运算符和分组 进行控制:
"ssh login" AND source:example.org
("ssh login" AND (source:example.org OR source:another.example.org)) OR _exists_:always_find_me
也可使用NOT运算符:
"ssh login" AND NOT source:example.org NOT example.org
请注意AND、OR和NOT区分大小写,必须全部大写。
通配符:
使用
?
替换单个字符,或使用
*
替换零个或多个字符:
source:*.org source:exam?le.org source:exam?le.*
注意:为避免内存过度消耗,前导通配符已被禁用! 您可以在 安全数据湖 配置文件中启用它们:
allow_leading_wildcard_searches = true
还需注意
message
,
full_message
和
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格式,且格式需与 安全数据湖 显示的格式一致:
timestamp:["2019-07-23 09:53:08.175" TO "2019-07-23 09:53:08.575"]
安全数据湖 为timestamp字段定制了索引映射,以 YYYY-MM-DD HH:MM:SS.sss 格式保存日期。如果Elasticsearch判定某个额外字段为日期并采用默认日期格式(即 YYYY-MM-DD HH:MM:SS.sss ),则在该时间段内的搜索示例如下:
otherDate:["2019-07-23T09:53:08.175" TO "2019-07-23T09:53:08.575"]
至少在Elasticsearch 6.x中,可以在时间范围内包含时区信息。查询示例如下:
otherDate:["2020-07-29T12:00:00.000-05:00" TO "2020-07-30T15:13:00.000-05:00"]
日期查询也可以是动态的,例如始终回溯指定时间:
otherDate:[now-5d TO now-4d]
转义
以下字符必须用反斜杠转义:
& | : \ / + - ! ( ) { } [ ] ^ " ~ * ?
示例:
resource:\/posts\/45326
错误类型
输入查询时,请注意警告和异常。如果输入的查询 安全数据湖 无法理解,会出现一个带有黄色感叹号的图标,并附带警告或异常消息。包括:
解析异常 :当出现解析错误时会抛出此异常。这通常发生在搜索查询语法出错时,错误信息应包含有关语法错误位置的详细信息。
无效运算符
:当运算符拼写错误时会出现此问题。例如,
AND
是有效运算符,但
and
则无效。大多数情况下,运算符需大写。
未知字段 :当搜索查询中包含的字段在相关索引集中不存在时会出现此警告。该判断基于数据流与索引集的关系。
参数错误 :当搜索查询中使用未声明的参数时会出现此错误。 参数 需先定义才能包含在搜索中。