全部產品
Search
文件中心

Simple Log Service:如何模糊查詢日誌?

更新時間:Jun 30, 2024

本文介紹不同方式的模糊查詢。

通過查詢文法進行模糊查詢

查詢原理

  1. Log Service查詢與模糊比對條件一致的前100個詞。

  2. 使用這前100個詞去匹配日誌記錄中的內容,並返回包含這些詞的日誌條目。

因為只查詢模糊條件命中的前100個詞,所以當模糊條件首碼很短且日誌中超過100個詞時,查詢結果會不精確。如果再結合not語句,會發現某些查詢條件未被過濾。例如執行not abcd*查詢語句,在結果中出現以abcd開頭的詞。

用法

在Log Service查詢文法中,星號(*)代表多個任一字元的詞,問號(?)代表單個字元的詞。例如:abc*代表查詢以abc開頭的詞。ab?d代表查詢以ab開頭、d結尾且中間包含單個字元的詞, 詳情請參見查詢文法

通過SQL的like文法進行精確的模糊查詢

like文法滿足標準的SQL like文法,在like文法中百分比符號(%)代表任意個字元。底線 (_)代表單個字元。

樣本:查詢key滿足abcd開頭的所有日誌,對應的查詢分析語句如下所示。

* | select * from log where key like 'abcd%'

查詢key不是以abcd開頭的所有日誌

* | select * from log where key not like 'abcd%'

通過SQL的正則式函數進行模糊查詢

通過正則式函數,可以在一個正則式中查詢多個詞。並且正則式的表達語義比like文法更強大,可以搜尋滿足數位詞以及滿足特定字元的詞等,詳情請參見正則式函數

樣本:

  • * | select * from log where regexp_like(key, abc*) 表示查詢以abc開頭的詞。

  • * | select * from log where regexp_like(key, abc\d+) 表示查詢以abc開頭且後面跟著數位詞。

  • * | select * from log where regexp_like(key, abc[xyz])表示查詢以abc開頭且後面跟著xyz中的某個字元的詞。