Kibana查询语法
- 要搜索一个确切的字符串,即精确搜索,需要使用双引号引起来:
path:”/app/logs/nginx/access.log” - 如果不带引号,将会匹配每个单词:
uid token - 模糊搜索:
path:”/app/~” - * 匹配0到多个字符:
*oken - ? 匹配单个字符 :
tok?n - 匹配是否包含的条件:
+:搜索结果中必须包含此项;-:不能含有此项- 什么都没有则可有可无:
+token -appVersion appCode
- 运算符AND/OR/NOT必须大写:
token AND uid ;token OR uid;NOT uid - 允许一个字段值在某个区间([] 包含该值,{}不包含):
@version:[1 TO 3] - 组合查询:
(uid OR token) AND version - 转义特殊字符
+ – && || ! ( ) { } [ ] ^ ” ~ * ? : \:转义特殊字符只需在字符前加上符号\
查询样例
简单查询
简单查询就是 关键字匹配、字符串包含等,比如说如下语句会找出 name 字段是 banana 的所有数据:
1 | name: banana |
但是如果 name 包含 peach 和 peach test,然后下面两个语句查出来会是两个结果。
1 | name: peach test |
上述查询会将 name 是 peach 和 name 是 peach test 的都给查出来
1 | name: "peach test" |
上述查询只会将 peach test 查出来,因为如果不加引号会自动关键字分词,将包含该关键字的所有数据匹配出来。
条件运算符
条件运算符就是 > >= < <=,在 KQL 里边都支持,使用也很简单,比如如下语句表示 age 字段大于等于 10。
1 | age >= 10 |
逻辑运算符
查询语言自然少不了逻辑运算符 与或非,在 KQL 中代表了 and or not
and 的用法:
1 | age >= 10 and age < 100 |
上述语句表示查询出 age 在 10 到 100 的左开右闭区间中的所有数据。
or 的用法:
1 | name: "Jeff" or name: "Kitty" |
上述语句表示筛选出 name 包含 Jeff 或者 Kitty 关键字的所有数据。
not 的用法:
1 | not age >= 10 |
上述语句表示筛选出 age 小于 10 的所有数据。
其中 and 的优先级比 or 的高
1 | age < 100 or name: wang and age >= 10 |
and 优先级高会先结合,所以意思是 满足 name 是wang age >= 10 或者 age < 100。
当然也可以通过小括号来改变优先级,比如:
1 | (age < 100 or name: wang) and age >= 10 |
意思是 age >=10 并且这条数据的 name是wang或者age < 100
同一字段运算符简写
可以用括号将多个逻辑运算符和条件合并到一起
1 | age = 10 or age = 100 |
通配符
通配符可以用于查找出存在某个key的数据
1 | name: * |
表示查找出所有带 name 字段的数据
1 | system: win* |
可以匹配到 system: win7,system: win10 等。
字段嵌套查询
首先准备一个多层的数据,比如下面的这几条数据。
1 | { |
比如想筛选 level1.level2.prop1 是 foo 或者是 baz的,可以这样写:
1 | level1.level2 { prop1: "foo" or prop1: "baz" } |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!
