

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# フィルター
<a name="CWL_QuerySyntax-Filter"></a>

 `filter` を使用して、1 つ以上の条件に一致するログイベントを取得します。

 **例: 1 つの条件を使用してログイベントをフィルタリングする** 

 コードスニペットは、`range` の値が ***3000*** より大きいすべてのログイベントを返すクエリの例を示します。このクエリは、結果を 20 個のログイベントに制限し、ログイベントを `@timestamp` 別に降順で並べ替えます。

```
fields @timestamp, @message
| filter (range>3000)
| sort @timestamp desc
| limit 20
```

 **例: 複数の条件を使用してログイベントをフィルタリングする** 

 キーワード `and` および `or` を使用して、複数の条件を組み合わせることができます。

 コードスニペットは、`range` の値が ***3000*** より大きく、`accountId` の値が ***123456789012*** に等しいログイベントを返すクエリの例を示します。このクエリは、結果を 20 個のログイベントに制限し、ログイベントを `@timestamp` 別に降順で並べ替えます。

```
fields @timestamp, @message
| filter (range>3000 and accountId=123456789012)
| sort @timestamp desc
| limit 20
```

## インデックス付きフィールドとフィルターコマンド
<a name="CWL_QuerySyntax-index"></a>

ロググループのフィールドインデックスを作成している場合は、それらのフィールドインデックスを活用して `filter` クエリの効率性を高め、スキャンされるボリュームを減らすことができます。例えば、`requestId` のフィールドインデックスを作成したとします。次に、 `filter requestId = value`または を含むそのロググループの CloudWatch Logs Insights クエリ`filter requestId IN [value, value, ...]`は、インデックス付きフィールドを含まないことがわかっているログイベントの処理をスキップしようとします。そのインデックス付きフィールドが含まれていることがわかっているログイベントのみをスキャンしようとすると、スキャン量を減らすことができ、クエリが高速になります。

フィールドインデックスおよびその作成方法の詳細については「[フィールドインデックスを作成してクエリパフォーマンスを改善し、スキャン量を削減する](CloudWatchLogs-Field-Indexing.md)」を参照してください。

**重要**  
フィールドインデックスの改善による恩恵があるのは `filter fieldName =...` と `filter fieldName IN...` を持つクエリのみです。`filter fieldName like` を持つクエリの場合、インデックスは使用されず、選択したロググループのすべてのログイベントを常にスキャンします。

**例: インデックスを使用して、特定のリクエスト ID に関連するログイベントを検索する** 

 この例では、`requestId` でフィールドインデックスが作成されていることを前提としています。このフィールドインデックスを使用するロググループの場合、クエリはフィールドインデックスを活用して最小量のログイベントをスキャンし、値が `123456` の `requestId` を持つイベントを見つけようとします。

```
fields @timestamp, @message
| filter requestId = "1234656"
| limit 20
```

## フィルターコマンドの一致と正規表現
<a name="CWL_QuerySyntax-regex"></a>

フィルターコマンドは、正規表現の使用をサポートします。以下の比較演算子 (`=`、`!=`、`<`、`<=`、`>`、`>=`) とブール演算子 (`and`、`or`、および `not`) を使用できます。

キーワード `in` を使用して集合要素関係をテストし、配列内の要素をチェックできます。配列の要素をチェックするには、`in` の後に対象の配列を配置します。ブール演算子 `not` および `in` を使用できます。`in` を使用するクエリを作成して、フィールドに文字列の一致があるログイベントを返すことができます。フィールドは完全な文字列でなければなりません。例えば、次のコードスニペットは、フィールド `logGroup` が完全な文字列 `example_group` であるログイベントを返すために `in` を使用するクエリを示しています。

```
fields @timestamp, @message
| filter logGroup in ["example_group"]
```

キーワードフレーズ `like` および `not like` を使用して、部分文字列を一致させることができます。正規表現の演算子 `=~` を使用して部分文字列を一致させることができます。`like` および `not like` で部分文字列を一致させるには、単一引用符または二重引用符で一致させたい部分文字列を囲みます。正規表現パターンは、`like` および `not like` と共に使用できます。部分文字列を正規表現の演算子と一致させるには、一致させたい部分文字列をスラッシュで囲みます。次の例には、`filter` コマンドを使用して部分文字列を照合する方法を示すコードスニペットが含まれます。

**例: 部分文字列の一致**

 以下の例では、`f1` に単語 ***Exception*** が含まれているログイベントを返します。これら 3 つの例すべてで、大文字と小文字が区別されます。

最初の例では、部分文字列を `like` と一致させます。

```
fields f1, f2, f3 
| filter f1 like "Exception"
```

 2 番目の例では、部分文字列を `like` および正規表現パターンと一致させます。

```
fields f1, f2, f3 
| filter f1 like /Exception/
```

 3 番目の例では、部分文字列を正規表現と一致させます。

```
fields f1, f2, f3 
| filter f1 =~ /Exception/
```

**例: 部分文字列をワイルドカードと一致させる**

 ピリオド記号 (`.`) を正規表現のワイルドカードとして使用して、部分文字列に一致させることができます。次の例では、クエリは `f1` の値が文字列 `ServiceLog` で始まる一致を返します。

```
fields f1, f2, f3
| filter f1 like /ServiceLog./
```

 ピリオド記号 (`.*`) の後にアスタリスク記号を置いて、できるだけ多くの一致を返す貪欲な量指定子を作成することができます。例えば、次のクエリは `f1` の値が文字列 `ServiceLog` で始まるだけでなく、文字列 `ServiceLog` も含む一致を返します。

```
fields f1, f2, f3
| filter f1 like /ServiceLog.*/
```

 考えられる一致は、次のようにフォーマットされている可能性があります: 
+  `ServiceLogSampleApiLogGroup` 
+  `SampleApiLogGroupServiceLog` 

**例: 一致から部分文字列を除外する**

次の例は、`f1` に ***Exception*** という単語が含まれないログイベントを返すクエリを示しています。この例では大文字と小文字が区別されます。

```
fields f1, f2, f3 
| filter f1 not like "Exception"
```

**例: 大文字と小文字を区別しないパターンで部分文字列を一致させる**

大文字と小文字を区別しない部分文字列を、`like` および正規表現と一致させることができます。次のパラメータ (**?i**) を、一致させる部分文字列の前に配置します。次の例は、`f1` に単語 ***Exception*** または ***exception*** が含まれるログベントを返すクエリを示しています。

```
fields f1, f2, f3 
| filter f1 like /(?i)Exception/
```