Elasticsearch查詢語句語法
使用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下午
相關文章
- ElasticSearch基礎及查詢語法Elasticsearch
- Elasticsearch查詢及聚合類DSL語句寶典Elasticsearch
- Hql查詢語句
- mysql查詢語句MySql
- ElasticSearch 7.X版本19個常用的查詢語句Elasticsearch
- [Mysql 查詢語句]——查詢欄位MySql
- mysql查詢語句集MySql
- SQL查詢語句 (Oracle)SQLOracle
- MySQL查詢阻塞語句MySql
- SQL server 查詢語句SQLServer
- Hibernate 查詢語句
- oracle查詢語句大全Oracle
- sql查詢語句流程SQL
- SQL mother查詢語句SQL
- Mysql之查詢語句MySql
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- mysql查詢語句5:連線查詢MySql
- [Mysql 查詢語句]——分組查詢group byMySql
- [Mysql 查詢語句]——查詢指定記錄MySql
- Laravel 子查詢語句用法Laravel
- 資料庫查詢語句資料庫
- mysql高階查詢語句MySql
- 多表查詢建表語句
- SQL Server阻塞查詢語句SQLServer
- oracle分頁查詢語句Oracle
- MySQL基礎查詢語句MySql
- Oracle常用的查詢語句Oracle
- 效能優化查詢語句優化
- oracle--06查詢語句Oracle
- SQL查詢語句使用 (轉)SQL
- sql 查詢經典語句SQL
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- MongoDB 常用查詢語法MongoDB
- Laravel ORM SQL 語句查詢、檢視,附贈 IDE ORM 語法提示LaravelORMSQLIDE
- [翻譯]ElasticSearch官方文件-查詢語言Elasticsearch
- MySQL內連線查詢語句MySql
- postgresql dba常用sql查詢語句SQL
- hisql ORM 查詢語句使用教程SQLORM