

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

# 在 Amazon CloudSearch 中搜尋文字
<a name="searching-text"></a>

您可透過搜尋文字欄位和常值欄位以找出任一文字字串：
+ `Text` 和 `text-array` 欄位一律可供搜尋。您可以搜尋個別字詞和片語。於 `text` 和 `text-array` 欄位內搜尋時不區分大小寫。
+ `Literal` 和 `literal-array` 欄位僅限於已由網域的索引選項啟用搜尋時才可供搜尋。您可以搜尋與指定的搜尋字串完全相符的項目。於常值欄位內搜尋時區分大小寫。

若您使用 simple 查詢剖析器或者使用結構式查詢剖析器搜尋而未指定任何欄位，預設即會搜尋所有 `text` 和 `text-array` 欄位。預設情況下將*不會*搜尋常值欄位。您可以使用 `q.options` 參數指定要搜尋哪些欄位。

您可以搜尋具有唯一性的文件 ID 欄位，就如同搜尋任何文字欄位。若要由搜尋請求中參考文件 ID 欄位，請使用欄位名稱 `_id`。文件 ID 一律會隨搜尋結果傳回。

**Topics**
+ [在 Amazon CloudSearch 中搜尋個別術語](#searching-text-terms)
+ [在 Amazon CloudSearch 中搜尋 Phrases](#searching-text-phrases)
+ [在 Amazon CloudSearch 中搜尋文字字串](#searching-text-literals)
+ [在 Amazon CloudSearch 中搜尋字首](#searching-text-prefixes)

## 在 Amazon CloudSearch 中搜尋個別術語
<a name="searching-text-terms"></a>

當您搜尋`text`和`text-array`欄位以取得個別詞彙時，Amazon CloudSearch 會依序尋找包含搜尋詞彙的所有文件。例如，電影範例資料的 `title` 欄位是設定為 `text` 欄位。如果您搜尋`title`該欄位尋找*星星*，您會在`title`欄位的任何位置找到包含*星星*的所有電影，例如*星星*、*星際大戰*和*星星。*這和搜尋 `literal` 欄位不同，後者的情況是欄位值必須與搜尋字串一字不差才會視為相符。

`simple` 查詢剖析器提供簡便的方式可搜尋 `text` 和 `text-array` 欄位以找出一個或多個字詞。預設即是使用 `simple` 查詢剖析器，除非您透過 `q.parser` 參數指定另一種查詢剖析器。

例如，若要搜尋 *katniss*，查詢字串請指定 `katniss`。根據預設，Amazon CloudSearch 會在搜尋結果中包含所有已啟用傳回的欄位。您可以使用 `return` 參數指定要傳回哪些欄位。

```
https://search-domainname-domainid.us-east-1.cloudsearch.amazonaws.com/
2013-01-01/search?q=katniss&return=title
```

預設情況下，回應將以 JSON 格式傳回：

```
{
    "status": {
        "rid": "rd+5+r0oMAo6swY=",
        "time-ms": 9
    },
    "hits": {
        "found": 3,
        "start": 0,
        "hit": [
            {
                "id": "tt1951265",
                "fields": {
                    "title": "The Hunger Games: Mockingjay - Part 1"
                }
            },
            {
                "id": "tt1951264",
                "fields": {
                    "title": "The Hunger Games: Catching Fire"
                }
            },
            {
                "id": "tt1392170",
                "fields": {
                    "title": "The Hunger Games"
                }
            }
        ]
    }
}
```

若要指定多個字詞，請以空格分隔各字詞。例如：`star wars`。指定多個搜尋詞彙時，預設情況是文件必須包含所有的字詞才會視為相符。各字詞可出現於文字欄位內的任一處，順序不拘。

預設情況下，使用 simple 查詢剖析器時將搜尋所有 `text` 和 `text-array` 欄位。您可以使用 `q.options` 參數指定要搜尋哪些欄位。例如，以下查詢將搜尋限制在 `title` 和 `description` 欄位，並且提升 `title` 欄位內相符項目的重要性高過 `description` 欄位內的相符項目。

```
q=star wars&q.options={fields: ['title^5','description']}
```

使用 simple 查詢剖析器時，您可以使用下列字首指定個別字詞為必要項目或選用項目，或是將其排除在搜尋結果之外：
+ **`+`**- 相符的文件必須包含 術語。此為預設情況；以空格分隔各字詞即等同於各字詞以 `+` 做為字首。
+ **`-`**- 從搜尋結果中排除包含術語的文件。`-` 運算子只會套用至個別字詞。例如，若要將預設搜尋的欄位內包含 *star* 一詞的文件排除，請指定：`-star`。搜尋 `search?q=-star wars` 則會擷取所有不含 *star* 一詞但包含 *wars* 一詞的文件。
+ **`|`**- 在搜尋結果中包含包含字詞的文件，即使不包含其他字詞也一樣。`|` 運算子只會套用至個別字詞。例如，若要納入包含兩個字詞之其一的文件，請指定：`term1 |term2`。搜尋 `search?q=star wars |trek` 則會納入同時包含 *star* 和 *wars* 兩個字詞或者是 *trek* 一詞的文件。

上述字首僅適用於簡易查詢中的個別字詞。若要建構複合查詢，您必須使用結構式查詢剖析器而非 simple 查詢剖析器。例如，使用結構式查詢剖析器搜尋 *star* 和 *wars* 兩個字詞時，指定方式為：

```
(and 'star' 'wars')
```

請注意，此查詢會比對任何搜尋的欄位內包含各字詞的文件。各字詞即使不在同一個欄位內亦將視為相符。不過，若您指定 `(and 'star wars' 'luke')`，*star* 和 *wars* 就必須出現於同一個欄位內，而 *luke* 所在的欄位則不拘。

使用 `structured` 查詢剖析器時若您未指定任何欄位，預設即會搜尋所有 `text` 和 `text-array` 欄位，就如同使用 `simple` 剖析器。同樣地，您可以使用 `q.options` 參數指定欲搜尋的欄位及提高選定欄位的重要性。如需詳細資訊，請參閱[建構複合查詢](searching-compound-queries.md)。

使用 simple 查詢剖析器也能進行*「模糊」*搜尋。若要進行模糊搜尋，請附加 `~` 運算子和一個值，以表示容許各字詞與使用者查詢字串差別到什麼程度下仍會視為相符。例如，指定 `planit~1` 會搜尋 *planit* 一詞並容許比對相差到一個字元，亦即結果將包括 *planet* 的命中項目。

## 在 Amazon CloudSearch 中搜尋 Phrases
<a name="searching-text-phrases"></a>

當您搜尋片語時，Amazon CloudSearch 會依指定的順序尋找包含完整片語的所有文件。您也可以進行*「鬆散」*片語搜尋，找出各字詞彼此相隔在指定距離內的片語。

若要使用 simple 查詢剖析器搜尋比對完整片語而非片語中的個別字詞，請用雙引號括住整段片語。例如，以下查詢將搜尋 *with love* 這個片語。

```
q="with love"
```

若要使用 simple 查詢剖析器進行鬆散片語搜尋，請附加 `~` 運算子和一個距離值。此距離值指定片語中的各個單詞可相隔的字數上限。例如，以下查詢將搜尋 *with love* 兩個字詞彼此相隔在三個字內的詞句。

```
q="with love"~3
```

複合查詢則是使用 `phrase` 運算子指定欲比對的片語，例如：

```
(phrase field=title 'star wars')
```

若要由複合查詢進行鬆散片語搜尋，請使用 `near` 運算子。`near` 運算子可讓您指定想要尋找的片語，以及欄位內的各字詞在相隔多遠的情況下仍會視為相符。例如，以下查詢將比對 * 欄位內 *star* 和 *wars`title` 兩個字詞彼此相隔不超過三個字的文件。

```
(near field=title distance=3 'star wars')
```

如需詳細資訊，請參閱[建構複合查詢](searching-compound-queries.md)。

## 在 Amazon CloudSearch 中搜尋文字字串
<a name="searching-text-literals"></a>

當您搜尋字串的常值欄位時，Amazon CloudSearch 只會傳回包含指定欄位中完整搜尋字串完全相符的文件，包括案例。例如，如果 `title` 欄位設定為常值欄位，而您搜尋 *Star*，則`title`欄位的值必須是 *Star* 才能視為相符項目：*star*、*star wars* 和 *star born* 將不會包含在搜尋結果中。這和文字欄位不同，後者的情況是搜尋不區分大小寫，而且指定的搜尋詞彙可出現於欄位內的任一處，順序不拘。

若要搜尋常值欄位，請於搜尋字串前加上您要搜尋的常值欄位的名稱做為字首，後接冒號。搜尋字串必須用單引號括住。例如，以下查詢將搜尋常值字串 *Sci-Fi*。

```
genres:'Sci-Fi'
```

此範例會搜尋每份文件的 genre 欄位，並且比對 genre 欄位內包含 *Sci-Fi* 值的所有文件。若要比對為相符，欄位值必須完全符合整個搜尋字串，包括大小寫。例如，若您搜尋 *sci-fi* 或 *young adult sci-fi*，凡 genre 欄位內包含 *Sci-Fi* 值的文件將一概不會納入搜尋結果。

複合查詢則是使用 `term` 運算子語法搜尋常值欄位。例如：`(term field=genres 'Sci-Fi')`。如需詳細資訊，請參閱[建構複合查詢](searching-compound-queries.md)。

您可以使用常值欄位搭配面向分類，讓使用者能夠根據分面屬性深入檢視結果。如需面向分類的詳細資訊，請參閱[在 Amazon CloudSearch 中取得和使用面向資訊](faceting.md)。

## 在 Amazon CloudSearch 中搜尋字首
<a name="searching-text-prefixes"></a>

您可透過搜尋 `text`、`text-array`、`literal` 和 `literal-array` 欄位以找出任何*「字首」*而非整個字詞。其比對結果將包含該字首，後接零個或多個字元。您必須指定至少一個字元做為字首 (若要比對所有文件，請由結構式查詢中使用 `matchall` 運算子)。一般而言，您應使用至少包含兩個字元的字首，以免比對的文件過多。

當您搜尋 `text` 或 `text-array` 欄位時，與字首相符的字詞可出現於欄位內容的任一處。若是搜尋常值欄位，則整個搜尋字串乃至包括字首字元皆需完全相符。
+ Simple 查詢剖析器 - 使用 `*` (星號) 萬用字元運算子可搜尋字首，例如 `pre*`。
+ 結構式查詢剖析器 - 使用 `prefix` 運算子可搜尋字首，例如 `prefix 'pre'`。

例如，以下查詢會在 title 欄位內搜尋字首 *oce* 並傳回各個命中項目的片名：

```
q=oce*&q.options={fields:['title']}&return=title
```

如果您對電影範例資料進行此搜尋，其將傳回為 *Ocean's Eleven* 和 *Ocean's Twelve*：

```
{

    "status": {
        "rid": "hIbIxb8oRAo6swY=",
        "time-ms": 2
    },
    "hits": {
        "found": 2,
        "start": 0,
        "hit": [
            {
                "id": "tt0240772",
                "fields": {
                    "title": "Ocean's Eleven"
                }
            },
            {
                "id": "tt0349903",
                "fields": {
                    "title": "Ocean's Twelve"
                }
            }
        ]
    }

}
```

複合查詢則是使用 `prefix` 運算子搜尋字首。例如，若要搜尋 `title` 欄位以找出字首 *oce*，請指定：

```
q.parser=structured&q=(prefix field%3Dtitle 'oce')
```

請記下 URL 編碼。如需詳細資訊，請參閱[建構複合查詢](searching-compound-queries.md)。

**注意**  
對文字欄位執行萬用字元搜尋時，請記住，Amazon CloudSearch 會在索引期間對文字欄位進行字符化，並根據為 欄位設定的分析方案執行鏡射。一般而言，Amazon CloudSearch 會對搜尋查詢執行相同的文字處理。不過，當您使用萬用字元運算子 (\$1) 或 `prefix` 運算子搜尋字首時，相關字詞功能對字首即毫無作用。這表示若搜尋以 `s` 結尾的字首，便不會比對該字詞的單數形式。凡結尾為 `s` 的任何字詞皆會發生這種情況，而不單只限於複數。例如，假使您對電影範例資料的 `actor` 欄位搜尋 `Anders`，就會有三部符合條件的電影。若您搜尋 `Ander*`，則除了同樣三部以外還會多出其他幾部電影。然而，搜尋 `Anders*` 將找不到任何相符項目。這是因為存放於索引中的字詞為 `ander`，而 `anders` 並未出現在索引中。如需 Amazon CloudSearch 如何處理文字及其如何影響搜尋的詳細資訊，請參閱 [Amazon CloudSearch 中的文字處理](text-processing.md)。