クエリ文字列の構文は、Simple Log Service (SLS) ドメイン固有言語 (DSL) の特徴です。この構文を使用して、データをすばやくフィルターし、条件付きステートメントを簡素化できます。この Topic では、クエリ文字列の一般的な構文ルールについて説明します。
関数リスト
クエリ文字列の構文は、次の関数で使用できます。
タイプ | 関数 | シナリオ |
イベントチェック関数 | クエリ文字列を使用して、イベントのフィールド値が特定の条件を満たしているかどうかを確認します。 | |
リソース関数 | Logstore からデータを取得し、テーブルとして返します。クエリ文字列を使用して、フィルター用のブラックリストとホワイトリストを設定します。 | |
RDS for MySQL データベースからデータを取得し、テーブルとして返します。クエリ文字列を使用して、フィルター用のブラックリストとホワイトリストを設定します。 |
特徴の概要
次の表に、フィールド検索と全文検索をサポートする検索機能を示します。
特徴 | フィールド検索 | 全文検索 |
部分文字列検索 | サポートされています | サポートされています |
ワイルドカード検索 ( | サポートされています | サポートされています |
完全一致検索 | サポートされています | サポートされていません |
正規表現検索 | サポートされています | サポートされていません |
数値範囲検索 | サポートされています | サポートされていません |
数値比較 | サポートされています | サポートされていません |
論理演算子 (and, or, not) とその組み合わせ | サポートされています | サポートされています |
文字のエスケープ
クエリ文字列の構文では、アスタリスク (*) やバックスラッシュ (\) などの特殊文字をエスケープする必要があります。
フィールド名のエスケープ
フィールド名を二重引用符 ("") で囲まないでください。フィールド名に特殊文字が含まれている場合は、バックスラッシュ (\) でエスケープする必要があります。例:
\*\(1+1\)\?: abc: 特殊文字をバックスラッシュ (\) でエスケープします。__tag__\:__container_name__: abc: 特殊文字をバックスラッシュ (\) でエスケープします。Chinese_Field: abc: 中国語の文字をエスケープする必要はありません。"content": abc: 無効な定義です。フィールド名を二重引用符 ("") で囲まないでください。
検索値のエスケープ
値に二重引用符 ("") またはバックスラッシュ (\) が含まれている場合は、バックスラッシュ (\) でエスケープする必要があります。例:
content: "abc\"xy\\z"。説明検索値は二重引用符 ("") でのみ囲むことができます。外側の文字列を囲むには一重引用符 ('') を使用し、内側の検索値を囲むには二重引用符 ("") を使用します。たとえば、
e_search("domain: '/url/test.jsp'")は正しくありません。正しいフォーマットはe_search('domain: "/url/test.jsp"')です。アスタリスク (*) または疑問符 (?) を検索する場合は、バックスラッシュ (\) でエスケープする必要があります。そうしないと、文字はワイルドカード文字として扱われます。
値に中国語の文字、英字、数字、アンダースコア (_)、ハイフン (-)、アスタリスク (*)、または疑問符 (?) のみが含まれている場合は、二重引用符 ("") で囲む必要はありません。それ以外の場合は、値を二重引用符 ("") で囲む必要があります。例:
status: "\*\?()[]:=": 値を二重引用符 ("") で囲み、アスタリスク (*) と疑問符 (?) をバックスラッシュ (\) でエスケープします。他の文字をエスケープする必要はありません。content: ()[]:=: 無効な定義です。値は二重引用符 ("") で囲む必要があります。status: active\*test、status: active\?test: フィールド値には、英字、アスタリスク (*)、および疑問符 (?) のみが含まれます。この場合、アスタリスク (*) または疑問符 (?) のみをエスケープする必要があります。値を二重引用符 ("") で囲む必要はありません。
部分文字列検索
全文検索
すべてのフィールドで部分文字列を検索します。
構文
e_search('substring')例
e_search('"fault"'): 中国語の部分文字列を検索します。e_search('"active error"'): スペースを含む完全な部分文字列を検索します。e_search('active error'): 複数の部分文字列を検索します。部分文字列の間では、デフォルトで OR 演算子が使用されます。
フィールド検索
特定のフィールドで部分文字列を検索します。
構文
e_search('...')例
e_search('status: active'): 部分文字列検索を実行します。e_search('author: "john smith"'): スペースを含む部分文字列を検索します。
説明e_search('field: active error')はfield:active OR "error"と同等です。このクエリは、field フィールドで "active" を検索するか、"error" の全文検索を実行します。
ワイルドカード検索
アスタリスク (*) は 0 文字以上を表します。疑問符 (?) は 1 文字を表します。中国語の文字などのワイド文字を表すこともできます。
全文検索
すべてのフィールドで部分文字列を検索します。
構文
e_search('substring')例
e_search('active*test'): 0 文字以上に一致します。文字列にアスタリスク (*) が含まれているため、二重引用符 ("") で囲む必要はありません。e_search('occurs*fault'): 0 文字以上に一致します。occurs faultとoccurs critical faultに一致します。e_search('active?good'): 1 文字に一致します。文字列に疑問符 (?) が含まれているため、二重引用符 ("") で囲む必要はありません。e_search('ac*tive?good'): パターンマッチを実行します。e_search('ac*tive??go*od'): 複数のワイルドカードを一緒に使用できます。
フィールド検索
特定のフィールドで部分文字列を検索します。
構文
e_search('field_name:substring')例
e_search('status: active*test'): 0 文字以上に一致します。e_search('status: active?good'): 1 文字に一致します。
完全一致
完全一致では、フィールド値が最初から最後まで完全に一致する必要があります。
構文
e_search('field_name==exact_match_string')例
e_search('author== "john smith"'): author フィールドの値が john smith と完全に一致します。e_search('status== ac*tive?good'): この演算子はワイルドカード文字と一緒に使用できます。
正規表現一致
正規表現一致は、ワイルドカード一致よりも強力な一致メソッドです。
構文
e_search('field_name~=regular_expression_string')説明正規表現にはバックスラッシュ (\) を含めることができるため、
rを使用してエスケープを防ぐことができます。デフォルトでは、部分一致が実行されます。完全一致の場合は、式の先頭に
^を、末尾に$を追加できます。
例
e_search('status~= "\d+"'): status フィールドの値に数字が含まれています。e_search('status~= "^\d+$"'): status フィールドの値は数値です。
数値比較
数値を比較できます。
直接数値比較
比較には
>、>=、=、<、<=を使用できます。e_search('age >= 18') # >=18 e_search('age > 18') # > 18 e_search('age = 18') # = 18 e_search('age <= 18') # <=18 e_search('age < 18') # < 18数値範囲の比較
閉区間を使用できます。アスタリスク (*) を使用して、開いた境界を示します。
e_search('count: [100, 200]') # >=100 かつ <=200 e_search('count: [*, 200]') # <=200 e_search('count: [200, *]') # >=200
論理関係
検索間の論理関係がサポートされています。括弧 () を使用してネストすることもできます。
論理関係 | キーワード |
AND |
|
OR |
|
NOT |
|
例:
e_search('abc OR xyz') # 関係演算子では大文字と小文字は区別されません。
e_search('abc and (xyz or zzz)')
e_search('abc and not (xyz and not zzz)')
e_search('abc && xyz') # and
e_search('abc || xyz') # or
e_search('abc || !xyz') # or not部分文字列一致は、論理関係もサポートします:
e_search('field: (abc OR xyz)') # フィールドに abc または xyz が含まれています。
e_search('field: (abc OR not xyz)') # フィールドに abc が含まれているか、xyz が含まれていません。
e_search('field: (abc && !xyz)') # フィールドに abc が含まれており、xyz は含まれていません。フィールドチェック
クエリ文字列を使用してフィールドをチェックできます。
e_search('field: *'): フィールドが存在します。e_search('not field:*'): フィールドが存在しません。e_search('not field:""'): フィールドが存在しません。e_search('field: "?"'): フィールドが存在し、その値は空ではありません。e_search('field==""'): フィールドが存在し、その値は空です。e_search('field~=".+"'): フィールドが存在し、その値は空ではありません。e_search('not field~=".+"'): フィールドが存在しないか、その値が空です。e_search('not field==""'): フィールドが存在しないか、その値が空ではありません。