クエリ文字列の構文は、Simple Log Service (SLS) のドメイン固有言語 (DSL) の機能です。これにより、データを迅速にフィルター処理し、条件ステートメントを簡素化できます。このトピックでは、クエリ文字列の一般的な構文ルールについて説明します。
関数リスト
以下の関数はクエリ文字列の構文をサポートしています。
|
タイプ |
関数 |
シナリオ |
|
イベントチェック関数 |
クエリ文字列を使用して、イベントのフィールド値が特定の条件を満たすかどうかを判断します。 |
|
|
リソース関数 |
Logstore からテーブル形式のデータを取得して返します。クエリ文字列で設定されたブラックリストとホワイトリストによるフィルター処理をサポートしています。 |
|
|
RDS 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('"error"'):部分文字列を検索します。 -
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*error'):0 個以上の文字に一致します。たとえば、occurs errorやoccurs critical errorに一致します。 -
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==""'):フィールドが存在しない、または値が空ではない。