搜索微件为 Web 应用提供可自定义的搜索界面。 它只需要少量 HTML 和 JavaScript 即可实现,并支持构面和分页等常见功能。您还可以使用 CSS 和 JavaScript 自定义界面。
如果需要更灵活地查询,请使用 Query API。请参阅使用 Query API 创建搜索界面。
构建搜索界面
构建搜索界面需要执行以下步骤:
- 配置搜索应用。
- 为应用生成客户端 ID。
- 为搜索框和结果添加 HTML 标记。
- 在页面上加载微件。
- 初始化 widget。
配置搜索应用
每个搜索界面都需要在管理控制台中定义搜索应用。应用提供查询设置,例如数据源、构面和搜索质量参数。
如需创建搜索应用,请参阅打造自定义搜索体验。
为应用生成客户端 ID
除了执行配置对 Cloud Search API 的访问权限中介绍的步骤以外,您还必须为 Web 应用生成客户端 ID。
配置项目时,请执行以下操作:
- 选择网络浏览器客户端类型。
- 提供应用的原始 URI。
- 记下客户端 ID。该 widget 不需要客户端密钥。
如需了解详情,请参阅适用于客户端 Web 应用的 OAuth 2.0。
添加 HTML 标记
该 widget 需要以下 HTML 元素:
- 搜索框的
input元素。 - 用于锚定建议对话框的元素。
- 搜索结果的元素。
- (可选)用于放置构面控件的元素。
此代码段显示了由其 id 属性标识的元素:
加载微件
使用 <script> 标记添加加载程序:
提供 onload 回调。加载程序准备就绪后,调用 gapi.load() 加载 API 客户端、Google 登录和 Cloud Search 模块。
初始化微件
使用 gapi.client.init() 或 gapi.auth2.init() 初始化客户端库,并提供您的客户端 ID 和 https://www.googleapis.com/auth/cloud_search.query 范围。使用 builder 类来配置和绑定 widget。
初始化示例:
配置变量:
自定义登录体验
当用户开始输入内容时,微件会提示用户登录。您可以使用适用于网站的 Google 登录来提供个性化的体验。
直接向用户授权
使用使用 Google 账号登录来监控和管理登录状态。
此示例在点击按钮时使用 GoogleAuth.signIn():
自动登录用户
为组织中的用户预先授权应用,以简化登录流程。此方法也适用于 Cloud Identity-Aware Proxy。请参阅将 Google 登录与 IT 应用配合使用。
自定义界面
您可以通过以下方式更改 widget 的外观:
- 使用 CSS 替换样式。
- 使用适配器修饰元素。
- 使用适配器创建自定义元素。
使用 CSS 替换样式
该 widget 包含自己的 CSS。如需替换它,请使用祖先选择器来提高特异性:
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
请参阅支持的 CSS 类参考。
使用适配器修饰元素
创建并注册一个适配器,以便在渲染之前修改元素。此示例添加了一个自定义 CSS 类:
在初始化期间注册适配器:
使用适配器创建自定义元素
实现 createSuggestionElement、createFacetResultElement 或 createSearchResultElement 以构建自定义界面组件。此示例使用 HTML <template> 标记:
注册适配器:
自定义分面元素必须遵循以下规则:
- 将
cloudsearch_facet_bucket_clickable附加到可点击的元素。 - 将每个分桶封装在
cloudsearch_facet_bucket_container中。 - 保持响应中的分桶顺序。
例如,以下代码段使用链接(而不是复选框)呈现构面。
自定义搜索行为
通过使用适配器拦截请求来替换搜索应用设置。
实现 interceptSearchRequest 以在执行之前修改请求。此示例将查询限制在所选的数据源:
注册适配器:
以下 HTML 用于显示按数据源进行过滤的选择框:
以下代码可以侦听更改、设置选择并在必要时重新执行查询。
您还可以通过在适配器中实现 interceptSearchResponse 来拦截搜索响应。
固定版本
- API 版本:在初始化之前设置为
cloudsearch.config/apiVersion。 - widget 版本:使用
gapi.config.update('cloudsearch.config/clientVersion', 1.1)。
如果未设置,两者均默认为 1.0。
例如,如需将 widget 固定到版本 1.1,请执行以下操作:
保护搜索界面
请遵循 Web 应用安全最佳实践,尤其要防止点击劫持。
启用调试功能
使用 interceptSearchRequest 启用调试:
if (!request.requestOptions) {
request.requestOptions = {};
}
request.requestOptions.debugOptions = {enableDebugging: true};
return request;