概述
Kibana 7.x 版本支持两种查询语法:
- KQL(Kibana Query Language)语法
- Lucene 语法
通用规则
引号
直接输入内容则会将内容进行分词,然后查询;若不想分词,整词查询,则两边加引号即可。
把 hello world
当作整体,不想被分词
"hello world"
模糊查询
基本规则有:
?
匹配单个字符*
匹配0到多个字符
例如下边这个可匹配:kibana
kiba?a
下边这个可匹配:elasticsearch
el*search
限定字段,下边这个可匹配title含有kibana的文档
title:kiba?a
模糊字段,下边这个可匹配title含有kibana的文档
tit*:kibana
容错查询
在一个单词后面加上~
启用模糊搜索,可以搜到一些拼写错误的单词。
first~
能匹配到 frist
查询语法
全文搜索
直接输入查询内容即可。
例如:查找包含hello,或者包含world,或者两者都包含,直接输入就好。
# 会被分词成 hello 和 world 两个单词。只要有包含其中一个分词内容就会被搜索出来
hello world
需要注意的是,这个是分词搜索,如果是 hel
搜索的话,就会搜索不到,因为 hello 是一个分词
限定字段
字段名: 匹配值
例如:查询FlightNum字段匹配"4H2KUBH"字符串的文档。
FlightNum: 4H2KUBH
查询FlightNum字段存在(无论值是什么)的文档
FlightNum: *
范围查询
可以指定日期、数字或者字符串字段的范围。关系运算符只能用在数值和时间类型的字段,支持关系运算符如下:
<=
小于等于>=
大于等于<
小于>
大于
例如,年龄大于等于30的
age >= 30
逻辑操作
支持逻辑运算符如下:
- and:与
- or:或
- not:非
and 使用
查询 name 字段包含 jane,且 addr 字段包含 beijing 的记录。
name:jane and addr:beijing
注意:查询结果不区分大小写
or 使用
查询 name 字段包含 jane,或者 addr 字段包含 beijing 的记录,或者两者都匹配。
name:jane or addr:beijing
not 的使用
查询出response字段中不包含200的记录
# 字段不等于某个值
not response:200
# 也可以不包含某个内容
level:ERROR AND (NOT msg:"Duplicate entry") AND (NOT "have concealed players") AND (NOT "cannot find service url") AND (NOT "502 Bad Gateway") AND (NOT "区服维护中,拒绝访问") AND (NOT "非法请求_!")
查询response包含200,并且整条记录不包含yes的数据记录
response:200 and not yes
查询response包含200,且response不包含yes的记录
response:(200 and not yes)
多个运算符结合
查询name包含jane且addr包含beijing的记录,或者job包含teacher的记录。
name:jane and addr:beijing or job:teacher
KQL中,and的优先级高于or。上方结果可以使用小括号来理解
(name:jane and addr:beijing) or job:teacher
值里使用运算符
查询response包含200,或者response包含404,或者包含200和404的记录。
response:(200 or 404)
# 或者
response:200 or response:400
注意:不保证顺序、不区分大小写。
嵌套查询
原始数据如下:
{
"level1": [
{
"level2": [
{
"prop1": "foo",
"prop2": "bar"
},
{
"prop1": "baz",
"prop2": "qux"
}
]
}
]
}
需求是:查找 level1.level2.prop1 是 foo 或者是 baz的
level1.level2 { prop1: "foo" or prop1: "baz" }