

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

# 在 Amazon CloudSearch 中使用動態欄位
<a name="using-dynamic-fields"></a>

藉助動態欄位，您無須事先確切得知文件包含哪些欄位即可為文件編製索引。例如，假設您想要搜尋一系列產品。您未必知道全部產品類別所有可能的產品屬性名稱，但您可將資料建構成所有文字類屬性存放於以 `_t` 結尾的欄位，所有整數值存放於以 `_i` 結尾的欄位。透過使用動態欄位，您可以將屬性欄位對應至適當的欄位類型，而無須為每一項可能的屬性分別設定其欄位。這可減少您需要事先完成的組態工作量，而且即使增加了具有新屬性的產品也不必修改您的網域組態。您也可以使用動態欄位，透過將新欄位對應至不可搜尋或不可傳回的欄位，實質上忽略該新欄位。

**Topics**
+ [在 Amazon CloudSearch 中設定動態欄位](#configuring-dynamic-fields)
+ [使用動態欄位來忽略 Amazon CloudSearch 中無法辨識的欄位](#ignoring-fields)
+ [在 Amazon CloudSearch 中搜尋動態欄位](#searching-dynamic-fields)

## 在 Amazon CloudSearch 中設定動態欄位
<a name="configuring-dynamic-fields"></a>

將欄位指定為動態欄位的方式是，指定萬用字元 (\$1) 做為欄位名稱的第一個字元、最後一個字元或唯一的字元。動態欄位名稱必須以萬用字元 (\$1) 開頭或結尾。多個萬用字元以及內嵌於字串的萬用字元則不受支援。

動態欄位的名稱將定義其模式。萬用字元為符合零個或多個任意字元。凡符合該模式而無法辨識的任何欄位都將使用動態欄位的索引選項進行設定。正規索引欄位的優先順序高於動態欄位。如果文件欄位名稱同時符合正規索引欄位和動態欄位模式，則會對應至正規索引欄位。

**注意**  
動態欄位可供設定的選項如同[靜態欄位](configuring-index-fields.md)。同樣地，與動態欄位相符的文件欄位名稱也必須符合如同靜態欄位名稱的所有條件。

例如，若您採納的命名慣例是將 `_i` 附加於任何新的 `int` 欄位名稱後面，您即可定義一個動態欄位搭配模式 `*_i` 將欄位類型設為 `int`，並且為新的 `int` 欄位設定一組預先定義的索引選項。當您加入了像是 `review_rating_i` 這樣的欄位後，該欄位便會自動依照 `*_i` 的選項進行設定並編製索引。

如果文件欄位符合多種動態欄位模式，將會使用最多字元的相符模式。若各種模式的字元數目相同，則是使用欄位名稱按字母順序排序時最先出現的動態欄位。

您可以定義 \$1 做為動態欄位，用於比對任何未與明確定義的欄位或較多字元動態欄位模式相對應的欄位。若您想要直接忽略無法辨識的欄位，這將非常實用。如需詳細資訊，請參閱[使用動態欄位來忽略 Amazon CloudSearch 中無法辨識的欄位忽略無法辨識的文件欄位](#ignoring-fields)。

動態欄位的數目將計入針對網域所定義的欄位總數。任一網域最多可有 200 組欄位定義，包括動態欄位在內。不過，單個動態欄位所定義的模式通常會比對多個文件欄位，所以您的索引中的欄位總數可超過 200 個。如需詳細資訊，請參閱[了解 Amazon CloudSearch 限制](limits.md)。使用動態欄位時請切記，索引中的欄位數目大幅增加可能會影響查詢效能。

為網域組態加入新欄位可能會影響編製索引期間對動態產生的欄位進行驗證的方式。如果驗證失敗，編製索引就會失敗。例如，若您定義一個動態欄位名為 `*_new` 並上傳內含名為 `rating_new` 欄位的文件，此 `rating_new` 欄位即會加入至您的索引。若您隨後又明確設定一個名為 `rating_new` 的欄位，則編製索引時該新欄位的組態將用於驗證您的文件中 `rating_new` 欄位的內容。如果 `*_new` 是設定為 `text` 欄位，但是您將 `rating_new` 設定為 `int` 欄位，一旦現有的 `rating_new` 欄位包含非整數資料，驗證就會失敗。

如需如何設定索引欄位的詳細資訊，請參閱[設定索引欄位](configuring-index-fields.md)。

## 使用動態欄位來忽略 Amazon CloudSearch 中無法辨識的欄位
<a name="ignoring-fields"></a>

Amazon CloudSearch 要求您為要編製索引之文件中發生的每個欄位設定索引欄位。不過，在某些情況下，您會想要對一組特定的欄位編製索引並直接忽略其他所有欄位。您可以利用動態欄位，定義一個名為 \$1 的常值欄位並停用該欄位的所有索引選項，藉此忽略所有無法辨識的欄位。凡是無法辨識的任何欄位都將繼承這些選項並加入至您的網域；不過，其欄位內容既不可搜尋也不可傳回，所以對索引大小的影響甚微 (然而，這類欄位照樣將計入針對網域所設定的欄位總數)。同樣地，您也可以選擇性忽略符合特定模式 (如 `*_n`) 的欄位。

**忽略無法辨識的欄位**

1. 設定您想要編製索引、搜尋或隨結果傳回的欄位。

1. 加入動態欄位以比對文件中發現的任何其他欄位，並停用該等欄位的所有索引選項：
   + 指定 `*` 做為欄位的名稱，不加任何字首或字尾字串 (您也可以指定更具體選擇性停用特定欄位的模式)。
   + 將欄位類型設為 `literal` 並停用 `search`、`facet` 和 `return` 選項。請注意，常值欄位的大小上限為 4096 個 Unicode 字碼指標。

由於較多字元的動態欄位模式會先比對，您還是可以使用動態欄位為您想要使用的欄位設定選項。凡未對應到正規索引欄位或較多字元動態欄位的任何欄位都將比對 \$1 模式。

**注意**  
當您使用名稱 `*` 建立動態欄位時，意味著您的索引可能包含任何有效的欄位名稱。這也意味著您可以在搜尋請求中參考任何有效的欄位名稱，無論您的索引中是否確實存在該欄位。

## 在 Amazon CloudSearch 中搜尋動態欄位
<a name="searching-dynamic-fields"></a>

您可以在搜尋請求及運算式中依名稱參考動態產生的欄位，就如同參考任何其他欄位。例如，若要搜尋動態產生的欄位 `color_t` 以找出顏色 `red`，便可使用結構式查詢剖析器如下：

```
q=color_t:’red’&q.parser=structured
```

如果您已定義全部截獲型動態欄位 (\$1) 用於對應不符合正規欄位或更具體動態欄位模式的任何欄位，即可在搜尋請求中指定*「任何」*有效的欄位名稱，無論您的索引中是否確實存在該欄位。

欄位名稱內不支援萬用字元，所以您不得參考動態欄位本身。例如，指定 `q=*_t:’red’` 會傳回錯誤。

動態產生的欄位由動態欄位組態繼承而來的選項控制著您能夠如何在搜尋請求中使用該欄位，例如，是否可對其進行搜尋、取得面向或反白句、將其用於排序或隨結果傳回。請注意，動態產生的欄位務必以明確方式搜尋。動態欄位並不屬於預設搜尋的欄位範疇，包括使用 simple 查詢剖析器或者使用結構式查詢剖析器搜尋而未指定任何欄位的情況。

如果目標欄位是陣列，則可以將動態欄位指定為其他欄位的來源。欄位的來源屬性支援萬用字元，您便能夠指定一種模式比對一組動態欄位。例如，若要搜尋由 `*_t` 動態欄位產生的所有欄位，您可以建立一個欄位名為 `all_t_fields` 並將其來源屬性設為 `*_t`。如此即會將名稱結尾為 `_t` 的所有欄位的內容複製到 `all_t_fields`。不過請注意，搜尋此欄位將會搜尋*「所有」*符合該模式的欄位，而不是只搜尋動態產生的欄位。

如需如何建構及提交搜尋請求的詳細資訊，請參閱[使用 Amazon CloudSearch 搜尋您的資料](searching.md)。