搜尋小工具可為網路應用程式提供自訂搜尋介面。 這個小工具只需要少量的 HTML 和 JavaScript 即可實作,並支援常見的搜尋功能,例如篩選條件和分頁。您也可以使用 CSS 和 JavaScript 自訂介面部分內容。
如果小工具提供的彈性不足,請考慮使用 Query API。如要瞭解如何使用 Query API 建立搜尋介面,請參閱「使用 Query API 建立搜尋介面」。
建立搜尋介面
建構搜尋介面需要幾個步驟:
- 設定搜尋應用程式
- 產生應用程式的用戶端 ID
- 新增搜尋框和搜尋結果的 HTML 標記
- 在頁面上載入小工具
- 初始化小工具
設定搜尋應用程式
每個搜尋介面都必須在管理控制台中定義搜尋應用程式。搜尋應用程式會提供查詢的其他資訊,例如資料來源、商情項目和搜尋品質設定。
如要建立搜尋應用程式,請參閱「建立自訂搜尋功能」。
產生應用程式的用戶端 ID
除了「設定 Google Cloud Search API 的存取權」一文中的步驟,您還必須為網頁應用程式產生用戶端 ID。
設定專案時,請注意下列事項:
- 選取「網路瀏覽器」用戶端類型
- 提供應用程式的來源 URI。
- 記下建立的用戶端 ID。您需要用戶端 ID 才能完成後續步驟。小工具不需要用戶端密鑰。
詳情請參閱「用戶端網頁應用程式的 OAuth 2.0」。
新增 HTML 標記
小工具需要少量 HTML 才能運作。您必須提供:
- 搜尋框的
input
元素。 - 用於錨定建議彈出式視窗的元素。
- 用於顯示搜尋結果的元素。
- (選用) 提供包含構面控制項的元素。
下列 HTML 程式碼片段顯示搜尋小工具的 HTML,其中要繫結的元素會以 id
屬性識別:
載入小工具
小工具會透過載入器指令碼動態載入。如要加入載入器,請使用 <script>
標記,如下所示:
您必須在指令碼標記中提供 onload
回呼。載入器準備就緒時,系統會呼叫函式。載入器準備就緒後,請呼叫 gapi.load()
載入 API 用戶端、Google 登入和 Cloud Search 模組,繼續載入小工具。
所有模組載入完畢後,系統會呼叫 initializeApp()
函式。
初始化小工具
首先,請使用產生的用戶端 ID 和 https://www.googleapis.com/auth/cloud_search.query
範圍呼叫 gapi.client.init()
或 gapi.auth2.init()
,初始化用戶端程式庫。接著,使用 gapi.cloudsearch.widget.resultscontainer.Builder
和 gapi.cloudsearch.widget.searchbox.Builder
類別設定小工具,並將其繫結至 HTML 元素。
以下範例說明如何初始化小工具:
上述範例會參照兩個設定變數,定義如下:
自訂登入體驗
根據預設,使用者開始輸入查詢時,小工具會提示使用者登入並授權應用程式。您可以透過網站適用的 Google 登入,為使用者提供更個人化的登入體驗。
直接授權使用者
使用「使用 Google 帳戶登入」監控使用者的登入狀態,並視需要登入或登出使用者。舉例來說,下列範例會觀察 isSignedIn
狀態,監控登入狀態變化,並使用 GoogleAuth.signIn()
方法,在使用者點選按鈕時啟動登入程序:
詳情請參閱「使用 Google 帳戶登入」。
自動登入使用者
您可以代表貴機構使用者預先授權應用程式,進一步簡化登入程序。如果使用 Cloud Identity Aware Proxy 保護應用程式,這個技巧也很有用。
詳情請參閱「透過 IT 應用程式使用 Google 登入」。
自訂介面
您可以透過下列技術組合變更搜尋介面的外觀:
- 使用 CSS 覆寫樣式
- 使用轉接程式裝飾元素
- 使用轉接程式建立自訂元素
使用 CSS 覆寫樣式
搜尋小工具會提供專屬的 CSS,用於設定建議和結果元素,以及分頁控制項的樣式。您可以視需要重新設定這些元素的樣式。
載入期間,搜尋小工具會動態載入預設樣式表。 應用程式樣式表載入後,系統會提高規則的優先順序。如要確保自己的樣式優先於預設樣式,請使用祖先選取器提高預設規則的特異性。
舉例來說,如果載入文件中的靜態 link
或 style
標記,下列規則就不會生效。
.cloudsearch_suggestion_container {
font-size: 14px;
}
請改用網頁中宣告的祖先容器 ID 或類別,限定規則。
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
如需支援的類別清單和 Widget 產生的 HTML 範例,請參閱「支援的 CSS 類別」參考資料。
使用轉接程式裝飾元素
如要在算繪元素前裝飾元素,請建立並註冊實作其中一種裝飾方法的轉接程式,例如 decorateSuggestionElement
或 decorateSearchResultElement.
。
舉例來說,下列轉接程式會將自訂類別新增至建議和結果元素。
如要在初始化小工具時註冊轉接程式,請使用相應 Builder
類別的 setAdapter()
方法:
裝飾器可能會修改容器元素和任何子項元素的屬性。裝飾期間可能會新增或移除子項元素。 不過,如果對元素進行結構性變更,建議直接建立元素,而不是裝飾元素。
使用轉接程式建立自訂元素
如要為建議、分面容器或搜尋結果建立自訂元素,請建立並註冊實作 createSuggestionElement
、createFacetResultElement
或 createSearchResultElement
的轉接器。
下列轉接程式說明如何使用 HTML <template>
標記建立自訂建議和搜尋結果元素。
如要在初始化小工具時註冊轉接程式,請使用相應 Builder
類別的 setAdapter()
方法:
使用 createFacetResultElement
建立自訂分面元素時,須遵守下列幾項限制:
- 您必須將 CSS 類別
cloudsearch_facet_bucket_clickable
附加至使用者點選的元素,才能切換儲存區。 - 您必須使用 CSS 類別
cloudsearch_facet_bucket_container
,將每個 bucket 包裝在含有元素的容器中。 - 您無法以與回應中顯示順序不同的順序算繪 bucket。
舉例來說,下列程式碼片段會使用連結而非核取方塊來顯示分面。
自訂搜尋行為
搜尋應用程式設定代表搜尋介面的預設設定,且為靜態。如要實作動態篩選器或商情項目 (例如允許使用者切換資料來源),您可以透過攔截搜尋要求並使用轉接程式,覆寫搜尋應用程式設定。
使用 interceptSearchRequest
方法實作轉接程式,在執行前修改對搜尋 API 發出的要求。
舉例來說,下列介面卡會攔截要求,將查詢限制為使用者選取的來源:
如要在初始化小工具時註冊轉接程式,請在建構 ResultsContainer
時使用 setAdapter()
方法。
下列 HTML 用於顯示選取方塊,以便依來源篩選:
下列程式碼會監聽變更、設定選取項目,並視需要重新執行查詢。
您也可以在介面卡中實作 interceptSearchResponse
,攔截搜尋回應。
釘選 API 版本
根據預設,小工具會使用最新穩定版 API。如要鎖定特定版本,請在初始化小工具前,將 cloudsearch.config/apiVersion
設定參數設為偏好的版本。
如未設定或設為無效值,API 版本預設為 1.0。
釘選小工具版本
為避免搜尋介面發生非預期的變更,請按照以下方式設定 cloudsearch.config/clientVersion
設定參數:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
如果未設定或設為無效值,小工具版本預設為 1.0。
保護搜尋介面
搜尋結果含有高度私密資訊。遵循網頁應用程式安全防護最佳做法,特別是防範點擊劫持攻擊。
詳情請參閱 OWASP 指南專案
啟用偵錯功能
使用 interceptSearchRequest
開啟搜尋小工具的偵錯功能。例如:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;