在進(jìn)行一般的數(shù)據(jù)查詢時,一般使用kibana來進(jìn)行,本文列舉部分常用的kibana搜索場景以供參考
全文搜索
在搜索欄輸入要查詢的關(guān)鍵詞,如login
,會返回所有字段值中包含login
的文檔
或者使用雙引號將多個關(guān)鍵詞包起來作為一個短語搜索,如"like Gecko"
注意:
以以下字段進(jìn)行說明
message: One or more of the indices you’re looking at contains a date field.
- 如果字段類型為
string(text)
時,會自動分詞,此時搜索其中的一個單詞(looking
)或多個連續(xù)單詞時(you’re looking at
),可以正常獲得搜索結(jié)果 - 如果字段類型為
string(keyword)
時,不會進(jìn)行分詞,此時整個字段為一個整體,不能通過搜索其中的某個或者某段關(guān)鍵詞來得到結(jié)果,此時應(yīng)該使用通配符進(jìn)行:One or more of the*
,*of the indices*
但是要注意盡量避免后者使用通配符打頭的情況,此時效率會極為低下,嚴(yán)重可能導(dǎo)致整個集群無響應(yīng),如果必須使用,要盡可能保證查詢條件精簡
字段
field:value
限定字段全文搜索
filed:"value"
精確搜索:關(guān)鍵字加上雙引號
http.code:404
搜索http狀態(tài)碼為404的文檔
根據(jù)字段本身是否存在
_exists_:http
返回結(jié)果中需要有http字段
_missing_:http
不能含有http字段
轉(zhuǎn)義特殊字符
+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
以上字符當(dāng)作值搜索的時候需要用\轉(zhuǎn)義
\(1\+1\)\=2用來查詢(1+1)=2
通配符
-
?
匹配單個字符 kiba?a -
*
匹配0到多個字符 el*search
? _ 不能用作第一個字符,例如:?text _text
正則
es支持部分正則功能,性能較差, 只有keyword類型的字段支持正則表達(dá)式
name:/joh?n(ath[oa]n)/
模糊搜索
quikc~ brwn~ foks~
:在一個單詞后面加上啟用模糊搜索,可以搜到一些拼寫錯誤的單詞
first~ 這種也能匹配到 frist
還可以設(shè)置編輯距離(整數(shù)),指定需要多少相似度
cromm~1 會匹配到 from 和 chrome
默認(rèn)2,越大越接近搜索的原始值,設(shè)置為1基本能搜到80%拼寫錯誤的單詞
近似搜索
在短語后面加上~,可以搜到被隔開或順序不同的單詞
"where select"~5
表示 select 和 where 中間可以隔著5個單詞,可以搜到 select password from users where id=1
范圍搜索
數(shù)值/時間/IP/字符串 類型的字段可以對某一范圍進(jìn)行查詢
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} [ ] 表示端點數(shù)值包含在范圍內(nèi),{ } 表示端點數(shù)值不包含在范圍內(nèi),可以混合使用,此語句為1到5,包括1,不包括5
后兩者可以簡化成以下寫法:
age:>10
age:<=10
age:(>=10 AND <20)
優(yōu)先級
quick^2 fox
使用^使一個詞語比另一個搜索優(yōu)先級更高,默認(rèn)為1,可以為0~1之間的浮點數(shù),來降低優(yōu)先級
邏輯操作
AND 與
OR 或
+ 搜索結(jié)果中必須包含此項
- 不能含有此項
·+apache -jakarta test aaa bbb
:結(jié)果中必須存在apache,不能有jakarta,剩余部分盡量都匹配到
分組
(jakarta OR apache) AND jakarta
字段分組
title:(+return +"pink panther")
host:(baidu OR qq OR google) AND host:(com OR cn)
示例
以下使用nginx日志進(jìn)行搜索展示, kibana中查詢語句,
-
查找status為
502
的日志條目status: 500
-
查找所有status不為
502
的日志not status:502
-
查找所有status為
20*
的日志status:20*
-
查找所有status不是
20*
和30*
的日志NOT status: 20* AND NOT status: 30*
-
查找圖片名稱為
1098584933527195648.jpg
的日志完整請求日志url: GET /image/1098584933527195648.jpg HTTP/1.1
request: *1098584933527195648.jpg*
-
查找請求時間超過10s的請求
responsetime>=10