使用KIBANA查詢ES中的數據
在搜索時,一定要選擇合理的時間范圍,這個時間范圍是基于創建索引模式時選擇的時間字段。比如@timestamp
。
另外一個小提示:默認情況下,搜索結果列表的上方會顯示一個柱狀圖。可以點擊左下角的小箭頭,查看其他的信息,比如搜索結果對應的ES請求主體等。
Elasticsearch查詢語句語法
查詢語句包含一系列詞語(term
)和操作符。一個詞語可以是一個單詞,比如INFO
。
也可以是雙引號包圍的一個短語,比如"INFO make"
,這種情況下會搜索這整個短語,按照單詞在短語中的順序。
指定字段名稱
默認情況下,會在所有字段中匹配要搜索的詞語。或者我們也可以指定要搜索的字段。比如以下查詢:
- 查詢
message
字段中包含INFO
單詞的記錄:message:INFO
- 查詢
message
字段中包含INFO make
短語的記錄:message:"INFO make"
。
在這個例子中,如果搜索message:"make INFO"
就會提示未找到結果
,因為message
字段并不包含make INFO
這個短語。(稍微注意搜索欄的輸入內容和ES查詢請求中語句的差別) - 查詢
message
字段中包含test
或inform
的記錄:message:(test OR inform)
。
如果省掉了OR
,也就是message:(test inform)
,則使用設置的default_operator
的值(其默認值為OR
)。 - 查詢所有
mes
開頭的字段中包含trust
的記錄:mes\*:trust
。*
通配符前需要加反斜杠\
。
這里有一個問題,搜索kafka.\*:trsutlog
會報錯,因為這里匹配的字段的數據類型,有字符串類型,數值類型,和未知類型。對于數值類型的字段,我們只能使用數字來搜索,使用字母等就會報錯。所以kafka.\*:17432195
就有結果了。
再比如,當我們嘗試查詢beat.\*:5.1.2
時就成功了,因為匹配的beat.hostname
和beat.version
字段都是字符串類型的。 - 查詢
message
字段值非空的記錄:_exists_:message
。
使用通配符
通配符搜索適用于單個單詞中,使用?
替換單個字符,*
替換零個或多個字符。比如:tags:trust* OR tes?
的查詢結果如下。注意這個查詢中的tes?
是用于匹配所有字段的內容。如果要限定tags
字段,則應該查詢tags:(trust* OR tes?)
。
另外,使用通配符查詢是很占用內存的。
正則表達式
比如查詢tags:/trust*/
。具體正則表達式語法參考:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax。
模糊操作符
可以搜索相似的詞語,比如trsut~
,同樣會匹配trust
。
取值范圍
范圍可以是日期,數值,或者字符串字段的范圍。閉區間:[min TO max]
;開區間:{min TO max}
;也可以結合在一起:[min TO max}
。
- 日期:
date:[2012-01-01 TO 2012-12-31]
- 數值:
count:[1 TO 5]
- 字符串:
tag:{alpha TO omega}
- 不指定最小值或最大值:
-
count:[10 TO *]
,也可以寫成count:>=10
-
date:{* TO 2012-12-31}
: date在2012-12-31之前(這個我測試了,查不到預想的結果)
-
Boolean操作符
比如ERROR WARNING +INFO -DEBUG
:
-
WARNING
和ERROR
可選,只是提高了相關性。 -
+INFO
表示一定要包含INFO
單詞。 -
-DEBUG
表示一定不能包含DEBUG
單詞。
如果使用AND
,OR
和NOT
操作符(也寫作&&
,||
,!
),則可以轉化成:
WARNING OR ERROR AND INFO AND NOT DEBUG
- 不正確的轉化:
(WARNING OR ERROR) AND INFO AND NOT DEBUG
。這種情況下,必須至少匹配WARNING
和ERROR
中一個。
保留字符
如果要匹配保留字符,則需要在字符前加反斜杠\
。保留字符包括: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
。比如:要搜索(1+1)=2
,則使用語句\(1\+1\)\=2
。
不過,<
和>
是無法轉義的,它們總是會創建一個范圍查詢。
參考鏈接
星期六, 26. 八月 2017 05:58下午