Kibana查询语法使用手册【转】

速查
全文搜索
在搜索栏输入login,会返回所有字段值中包含login的文档
使用双引号包起来作为一个短语搜索

"like Gecko"

 


也可以按页面左侧显示的字段搜索
限定字段全文搜索:field:value
精确搜索:关键字加上双引号 filed:“value”
http.code:404 搜索http状态码为404的文档

字段本身是否存在
exists:http:返回结果中需要有http字段
missing:http:不能含有http字段
通配符

? 匹配单个字符

匹配0到多个字符

kiba?a, el*search

 



? * 不能用作第一个字符,例如:?text *text

正则
es支持部分正则功能,性能较差
name:/joh?n(ath[oa]n)/
模糊搜索

 

quikc~ brwn~ foks~

 



:在一个单词后面加上启用模糊搜索,可以搜到一些拼写错误的单词

first~ 这种也能匹配到 frist

还可以设置编辑距离(整数),指定需要多少相似度
cromm~1 会匹配到 from 和 chrome
默认2,越大越接近搜索的原始值,设置为1基本能搜到80%拼写错误的单词

近似搜索
在短语后面加上~,可以搜到被隔开或顺序不同的单词
“where select”~5 表示 select 和 where 中间可以隔着5个单词,可以搜到 select password from users where id=1

范围搜索
数值/时间/IP/字符串 类型的字段可以对某一范围进行查询
length:[100 TO 200]
sip:[“172.24.20.110” TO “172.24.20.140”]
date:{“now-6h” TO “now”}
tag:{b TO e} 搜索b到e中间的字符
count:[10 TO *] * 表示一端不限制范围
count:[1 TO 5} [ ] 表示端点数值包含在范围内,{ } 表示端点数值不包含在范围内,可以混合使用,此语句为1到5,包括1,不包括5
可以简化成以下写法:
age:>10
age:<=10
age:(>=10 AND <20)

优先级
quick^2 fox
使用^使一个词语比另一个搜索优先级更高,默认为1,可以为0~1之间的浮点数,来降低优先级
逻辑操作

AND
OR

+:搜索结果中必须包含此项
-:不能含有此项
+apache -jakarta test aaa bbb:结果中必须存在apache,不能有jakarta,剩余部分尽量都匹配到

分组

(jakarta OR apache) AND jakarta

 



字段分组

title:(+return +"pink panther")
host:(baidu OR qq OR google) AND host:(com OR cn)

 



转义特殊字符
= && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
以上字符当作值搜索的时候需要用\转义
(1+1)=2用来查询(1+1)=2
简单查询
1、范围查询

age:[20 TO 30] age:{20 TO 30}

 



注:[ ] 表示端点数值包含在范围内,{ } 表示端点数值不包含在范围内

2、逻辑操作

AND OR 例子:firstname:H* AND age:20 firstname:H* OR age:20

 



:搜索结果中必须包含此项
:不能含有此项
例: +firstname:H* -age:20 city:H* firstname字段结果中必须存在H开头的,不能有年龄是20的,city字段H开头的可有可无

3、分组
(firstname:H* OR age:20) AND state:KS 先查询名字H开头年龄或者是20的结果,然后再与国家是KS的结合

firstname:(+H* -He*) 搜索firstname字段里H开头的结果,并且排除firstname里He开头的结果

4、转义特殊字符

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

 



注意:以上字符当作值搜索的时候需要用 \ 转义

Lucene语法
Kibana查询语法和Lucene相同,下面是Lucene的查询语法介绍。

注意:Lucene查询语法不适合在程序中使用,程序中使用可以调用Lucene-API,API提供了丰富功能来组合定制你所需要的查询器,查询语法是为手工输入高级查询设计的,而不是为程序拼接语法串而设计的。

简单说明

Terms

一个查询将分解为若干Term以及操作符,有两种Term,其一是单一Term,其二为短语
单一Term是经过分析器分词后的最小单元,就是一个简单的单词,比如:hello、world等
短语是用双括号括起来的一组词,例如:”hello world”
多个Term可以通过布尔操作合并在一个更加复杂的查询器中

 



Fields
Lucene支持多字段数据,当你在查询的时候你可以指定一个字段查询,key和value用冒号隔开即可,如:

MODULE:FrontNginx AND thumbnail

 



模糊查询
Term Modifiers
Lucene支持在Term中使用通配符来支持模糊查询,“?”通配符一个字符,“*”通配多个字符

te?t
test*
te*t

 



注意:不能将“*”和“?”放在第一个字符来查询。

Fuzzy Searches
Lucene支持基于编辑距离算法的模糊搜索,可以使用波浪符号“~”放在查询词的后面,比如搜索一个与“ahumbnail”拼写相近的词可以使用:

ahumbnail~



该查询将寻找类似“ahumbnail”和“thumbnail”等的词语,也叫相似度查询。

Proximity Searches
Lucene支持指定距离查询,可以使用波浪号“~”加数字在查询词后。举例来说搜索“thumbnail”和“quality”距离10个字符以内,你可以使用如下语法

"thumbnail quality"~10

 



Range Searches
范围查询允许指定某个字段最大值和最小值,查询在二者之间的所有数据。也可以对非字符类型来进行范围查找:

Parsed.status:[400 TO 499]
Parsed.bucket:{mail-online TO nail-online}

 



注意:范围查找在Kibana中查找的结果并不准确。

优先级
Lucene支持给不同的查询词设置不同的权重。设置权重使用“”符号,将“”放于查询词的尾部,同时跟上权重值,权重因子越大,该词越重要。设置权重允许你通过给不同的查询词设置不同的权重来影响文档的相关性,比如:

jakarta apache
jakarta^4 apache
"jakarta apache"^4 "jakarta lucene"

 



在默认情况下,权重因子为1.

Term操作符
Boolean operators
布尔操作符可以将多个Term合并为一个复杂的逻辑查询。Lucene支持AND,
+,OR,NOT, -作为操作符号。注意,所有的符号必须为大写。

MODULE:FrontNginx AND Parsed.status:403
"avaimg.nosdn.127.net" OR Parsed.status:403
NOT Parsed.status:200

 



+操作符规定在其后的Term必须出现在文档中,也就是查询词中的MUST属性。
-操作符排除了包含其后Term的文档,跟NOT有点类似,如下:

+Parsed.status:200 -FileName:"nos_access.log"

 



Grouping
Lucene支持使用圆括号来将查询表达式分组,这将在控制布尔控制查询中非常有用。

(Parsed.status:200 Parsed.status:206) AND "mail-online"

 



这种语法对消除歧义,确保查询表达式的正确性具有很大的意义。

Field Grouping
Lucene支持对字段用圆括号来进行分组,当我们要查询status中含有“200”和“206”时,我们可以使用如下语法:

Parsed.status:(+200 OR 206)

 



Escaping Special Characters
Lucene支持转义查询中的特殊字符,以下是Lucene的特殊字符清单:

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

 



转义特殊字符我们可以使用符号“\”放于字符之前。

转自

(25条消息) Kibana查询语法使用手册_白开水的博客-CSDN博客_kibana查询语法
https://blog.csdn.net/u013958257/article/details/88567581

 

1、要搜索一个确切的字符串,即精确搜索,需要使用双引号引起来:path:”/app/logs/nginx/access.log”


2、如果不带引号,将会匹配每个单词:uid token


3、模糊搜索:path:”/app/~


4、* 匹配0到多个字符:*oken


5、? 匹配单个字符 : tok?n


6、+:搜索结果中必须包含此项 -:不能含有此项 什么都没有则可有可无: +token -appVersion appCode


7、运算符AND/OR/NOT必须大写:token AND uid ;token OR uid;NOT uid


8、允许一个字段值在某个区间([] 包含该值,{}不包含):@version:[1 TO 3]


9、组合查询:(uid OR token) AND version


10、转义特殊字符 + – && || ! ( ) { } [ ] ^ ” ~ * ? : \ 转义特殊字符只需在字符前加上符号\


11、分组(firstname:H* OR age:20) AND state:KS 先查询名字H开头年龄或者是20的结果,然后再与国家是KS的结合


12、firstname:(+H* -He*) 搜索firstname字段里H开头的结果,并且排除firstname里He开头的结果

 

查询语法

全文搜索

单词

apple pear ,返回所有字段中包含单词apple或pear的文档

 

短语

"apple pear" ,返回所有字段中包含短语"apple pear"的文档

 

按字段搜索

一个字段

nickname:apple pear,返回nickname字段包含单词apple或pear的文档
nickname:"apple pear",返回username字段包含短语"apple pear"的文档

 

 

多个字段

name:jack AND nickname:"apple pear",返回name字段包含单词jack 并且 nickname字段包含短语"apple pear"的文档

 

通配符搜索

匹配单一字符

nickname:appl? ,返回nickname字段包含单词(appl+任意一个字符)的文档

 

匹配任意多个字符

nickname:app*e,返回nickname字段包含单词(以app开头,以e结尾)的文档

 

范围搜索

包括首尾

dt:["2016-06-25" TO "2016-08-25"],返回"2016-06-25"≤ dt ≤"2016-08-25"的文档

 

不包括首尾

dt:{"2016-06-25" TO "2016-08-25"},返回"2016-06-25"< dt <"2016-08-25"的文档

 

包括首或尾

dt:{"2016-06-25" TO "2016-08-25"],返回"2016-06-25"< dt ≤"2016-08-25"的文档

 

布尔搜索

AND

name:"jack ma" AND nickname:"apple pear pear",返回name字段包含"jack ma" 且 nickname字段包含"apple pear pear"的文档

 

OR

name:jack OR nickname:apple,返回name字段包含jack或nickname字段包含apple的文档

 

NOT

name:jack NOT nickname:"pear pear",返回name字段包含jack,nickname字段不包含"pear pear"的文档

 

分组搜索

(name:"jack chen" OR name:lucy ) AND  nickname:"apple pear",返回name字段包含"jack chen"或lucy,同时nickname字段包含"apple pear"的文档

name:("jack chen" NOT lucy ) AND  nickname:"apple pear",返回name字段包含"jack chen"不包含lucy,同时nickname字段包含"apple pear"的文档

 

转义特殊字符

{ }  + - && || ! ( ) [ ] ^ " ~ * ? : \,用\转义。能搜索到的内容和选择的分词器有关。
posted @ 2021-12-24 15:18  paul_hch  阅读(537)  评论(1编辑  收藏  举报