Kibana 的查询语法基于 Lucene 的查询语法,他允许 boolean 值,通配符,过滤器等等操作。

字符串查询

通常一个查询会包含一个或者多个单词或者组合。一个简单的查询语句就是用引号包含的一组词,比如 “search demo”.

如果不包含双引号,Kibana 会单独的去匹配每一个词。

正则表达式查询

大部分正则表达式是允许匹配部分字符的,然而在 Lucene 中,正则表达式用来匹配整个字符串,比如 abcde 这个字符串

  • 使用 ab.* 能够匹配
  • 但是使用 abcd 是不能匹配的

正则表达式中,有一些保留字符

. ? + * | { } [ ] ( ) " \

这些字符如果出现在表达式中都需要进行转义,比如 \* ,或者 \\

这些符号的含义和正则表达式一致

  • . 用来表示任意字符
  • ? 用来表示前面的字符重复一次或零次
  • + 表示前面的字符重复一次或多次
  • * 表示前面的字符重复零次或多次
  • {n} 表示重复n次
  • {n,m} 表示重复n到m次
  • () 表示 group, 组合其他使用
  • | 表示 OR 或者,(http|https) http 或者 https 匹配
  • [] 表示括号中的任意一个

更多的关于正则表达式的内容可以参考任意一本关于正则的书。

补充,在 Kibana 中如下字符都需要转义

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

比如查询 (1+1)=2 需要使用 \(1\+1\)\=2

可选表达式

Lucene 中还能够开启一些扩展操作。

Complement 模式

比如 ab~cd 可以表示字符串以 ab 开始接着跟随一个任意长度非c字符,以d结尾的字符串。

Interval

使用 <> 来匹配数字范围, 比如 foo<1-100> 可以匹配string foo90 却不能匹配 foo101

Intersection

符号 & 用来连接两个 patterns 两个正则表达式都需要匹配

Any string

符号 @ 用来匹配所有,和 Intersection 联合使用可以用来表示,匹配所有除了。

比如 @&~(foo.*) 用来匹配所有字符,除了以 foo 开头的字符

范围查询

范围查询用来查询一定范围的匹配,比如

ResponseTime: [10 TO *]

用来查询请求时间大于等于 10 ms 的,或者使用 ResponseTime: {10 TO *} 来匹配大于 10 ms 的。

方括号可以表示包括,花括号不包括,所以 [10 TO 50} 表示 需要 10<=value<50

也可以简化写成

age:(>=10 AND <50)

这样

Boolean 查询

逻辑运算 AND、OR、NOT 可以用来组合查询语句,这三个运算符必须 大写 ,更多内容可以查看 Lucene 语法。

  • + 搜索结果中必须包含此项
  • - 不能含有此项

字段名称搜索

比如需要查询 statusactive 的内容,可以

status:active

近似搜索

在短语后面加 ~ 可以搜到被隔开或者顺序不同的单词。

比如 “where select”~5, 表示 select 和 where 中间可以相隔5个单词。

reference