

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 篩選條件
<a name="CWL_QuerySyntax-Filter"></a>

 使用 `filter` 來取得與一個或多個條件相符的日誌事件。

 **範例：使用一個條件篩選日誌事件** 

 程式碼片段會顯示一個查詢範例，其會傳回 `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
```

## 索引欄位和 filter 命令
<a name="CWL_QuerySyntax-index"></a>

如果您已為日誌群組建立欄位索引，您可以利用這些欄位索引，讓您的`filter`查詢更有效率並減少掃描的磁碟區。例如，假設您已建立 的欄位索引`requestId`。然後，該日誌群組上包含`filter requestId = value`或`filter requestId IN [value, value, ...]`將嘗試略過處理已知不包含索引欄位的日誌事件的任何 CloudWatch Logs Insights 查詢。透過嘗試僅掃描已知包含該索引欄位的日誌事件，可以減少掃描磁碟區，並且查詢更快。

如需欄位索引以及如何建立它們的詳細資訊，請參閱 [建立欄位索引以改善查詢效能並減少掃描磁碟區](CloudWatchLogs-Field-Indexing.md)。

**重要**  
只有具有 `filter fieldName =...`和 的查詢`filter fieldName IN...`將受益於欄位索引改進。使用 的查詢`filter fieldName like`不使用索引，並一律掃描所選日誌群組中的所有日誌事件。

** 範例：使用索引尋找與特定請求 ID 相關的日誌事件 ** 

 此範例假設您已在 上建立欄位索引`requestId`。對於使用此欄位索引的日誌群組，查詢會利用欄位索引嘗試掃描最少數量的日誌事件，以尋找值`requestId`為 的事件 `123456` 

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

## filter 命令中的比對和規則表達式
<a name="CWL_QuerySyntax-regex"></a>

篩選命令支援使用規則表達式。您可以使用下列比較運算子 (`=`、`!=`、`<`、`<=`、`>`、`>=`) 和布林值運算子 (`and`、`or` 以及 `not`)。

您可以使用關鍵字 `in` 來測試設定的成員資格並檢查陣列中的元素。若要檢查陣列中的元素，將陣列放在 `in` 之後。您可以搭配 `in` 使用布林運算子 `not`。您可以建立查詢来使用 `in` 傳回欄位為字串相符的日誌事件。欄位必須是完整的字串。例如，下列程式碼片段會顯示查詢使用 `in` 来傳回欄位 `logGroup` 是完整的字串 `example_group` 的日誌事件。

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

您可以使用關鍵字詞 `like` 和 `not like` 來比對子字串。您可以使用規則表達式運算子 `=~` 來比對子字串。若要比對帶有 `like` 和 `not like` 的子字串，請將要比對的子字串放在單引號或雙引號中。您可以搭配 `like` 和 `not like` 使用規則表達式模式。若要使用規則表達式運算子來比對子字串，請以斜線括住想要比對的子字串。下列範例包含程式碼片段，示範如何使用 `filter` 命令來比對子字串。

**範例：比對子字串**

 以下範例會傳回 `f1` 含有單字 ***Exception*** 的日誌事件。所有三個範例都會區分大小寫。

第一個範例比對帶有 `like` 的子字符。

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

 第二個範例比對帶有 `like` 和規則表達式模式的子字串。

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

 第三個範例會比對子字串與規則表達式。

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

**範例：比對子字串與萬用字元**

 您可以使用句點符號 (`.`) 作為規則表達式中的萬用字元來比對子字串。在下列範例中，查詢會傳回與以字串 `ServiceLog` 開始的 `f1` 的值相符項目。

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

 您可以在句點符號 (`.*`) 後面放置一個星號符號，來建立窮盡數量詞，窮盡數量詞會傳回儘可能多的相符項目。例如，以下查詢會傳回與以字串 `ServiceLog` 開始而且還包含字串 `ServiceLog` 的 `f1` 的值相符項目。

```
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/
```