

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

# 在 Amazon CloudSearch 中調整搜尋請求效能
<a name="tuning-search"></a>

處理搜尋請求難免會耗費大量資源，以致可能影響您運行搜尋網域的效能和成本。一般而言，傳回大量命中項目的搜尋和複雜的結構式查詢比起僅比對搜尋網域內一小部分文件的單純文字查詢更耗費資源。

若您遇到回應時間過久或頻繁出現內部伺服器錯誤 (通常為 507 或 509 錯誤) 的狀況，或者察覺您的搜尋網域在搜尋的資料量並未大幅增加的情形下仍迭增耗用執行個體時數，則微調您的搜尋請求將有助於減輕處理負擔。本節探索調校搜尋請求的注意事項以及可採取的各種措施。

## 分析查詢延遲
<a name="tuning-search-latency"></a>

調校您的請求之前，您必須先分析目前的搜尋效能。記錄您的搜尋請求和回應時間，以獲悉處理哪幾類的請求最為費時。耗時的搜尋將佔用搜尋網域的資源，可能會影響整體效能造成失衡。最為費時的搜尋請求經過最佳化可加快*「所有」*搜尋的速度。

**Topics**
+ [減少命中數](#tuning-search-numdocs)
+ [簡化結構式查詢](#simplifying-structured-queries)

### 減少命中數
<a name="tuning-search-numdocs"></a>

查詢延遲狀況直接與符合的文件份數成正比。比對大部分文件的搜尋通常最為費時。

去除以下兩類經常產生大量相符文件的搜尋將可大幅提升整體效能：
+ 比對主體內每一份文件的查詢 (`matchall`)。這雖是列出網域內所有文件的便捷方法，卻也是最耗費資源的查詢。如果您有大量文件，這不僅會導致其他請求逾時，甚至就連其本身也可能逾時。
+ 僅指定一兩個字元的字首 (萬用字元) 搜尋。若您使用這類搜尋隨著使用者輸入而提供即時結果，請等到使用者至少輸入了兩個字元之後再開始提交請求並顯示可能的相符項目。

如要減少符合請求條件的文件份數，您還可以執行下列事項：
+ 將不相關的單詞從您的主體去除以免用於進行比對。最簡單的方法是將其加入至您所使用的分析方案，列為停用詞清單字典項目。或者，您可以預先處理您的資料，剔除不相關的單詞。去除不相關的單詞亦有利於縮減索引的大小，進而降低成本。
+ 使用 `fq` 參數根據特定欄位的值明確篩選結果。

若您仍有請求需要比對大量文件，則可透過盡量減少對結果集進行處理的量以降低延遲：
+ 將您所請求的面向資訊減至最少。產生面向數量會增加處理請求所需的時間，並使其他請求發生逾時的可能性提高。如果您肯定要請求面向資訊，請切記指定的面向愈多，處理請求所需的時間會愈久。
+ 避免使用自行撰寫的運算式進行排序。對結果進行排序所需的額外處理量會使請求發生逾時的可能性提高。如果您必須自訂結果的排序方式，使用欄位通常會比使用運算式更有效率。

請切記，由搜尋結果傳回大量資料可能會增加傳輸時間並影響查詢延遲。盡量減少您所使用的傳回欄位數目，以便提升效能並縮減索引的大小。

### 簡化結構式查詢
<a name="simplifying-structured-queries"></a>

查詢條件指定的字句愈多，處理查詢所需的時間會愈久。

若您使用複雜的結構式查詢但執行效果不佳，即必須設法減少字句數目。在某些情況下，您或許只需要設定限制或重新建構查詢就能解決問題。不過有些時候，您可能必須修改網域組態以適應更簡單的查詢。