Cloud Search 教程的这一页介绍了如何设置数据源和内容连接器以将数据编入索引。 如需从本教程的开头开始学习,请参阅 Cloud Search 入门教程
构建连接器
将工作目录更改为 cloud-search-samples/end-to-end/connector 目录,然后运行以下命令:
mvn package -DskipTests
该命令会下载构建内容连接器所需的依赖项,并编译代码。
创建服务账号凭据
连接器需要服务账号凭据才能调用 Cloud Search API。如需创建凭据,请执行以下操作:
- 返回 Google Cloud 控制台。
- 在左侧导航栏中,点击凭据 。系统会显示“凭据”页面。
- 点击 + 创建凭据 下拉列表,然后选择 服务账号。系统会显示“创建服务账号”页面。
- 在服务账号名称 字段中,输入“tutorial”。
- 记下服务账号 ID 值(紧跟在服务账号名称后面)。 此值稍后会用到。
- 点击创建 。系统会显示“服务账号权限(可选)”对话框。
- 点击继续 。系统会显示“向用户授予访问此服务账号的权限(可选)”对话框。
- 点击完成 。系统会显示“凭据”界面。
- 在“服务账号”下,点击服务账号电子邮件地址。系统会显示“服务账号详情”页面。
- 在“密钥”下,点击添加密钥 下拉列表,然后选择创建新密钥 。系统会显示“创建私钥”对话框。
- 点击创建 。
- (可选)如果系统显示“Do you want to allow downloads on console.cloud.google.com?”(您要允许 console.cloud.google.com 上的下载吗?)对话框,请点击允许 。
- 私钥文件会保存到您的计算机。记下下载文件的位置。此文件用于配置内容连接器,以便在调用 Google Cloud Search API 时进行身份验证。
初始化第三方支持
在调用任何其他 Cloud Search API 之前,请先初始化 Google Cloud Search 的第三方支持。
如需初始化第三方支持,请执行以下操作:
- 在 Cloud Search 平台项目中创建 Web 应用凭据。请参阅 创建凭据。您需要客户端 ID 和客户端密钥。
- 使用
OAuth 2.0 Playground获取访问令牌:
- 点击 OAuth 2.0 配置 (设置图标),然后选中使用您自己的 OAuth 凭据 。
- 输入您的客户端 ID 和客户端密钥。
- 在“范围”字段中,输入
https://www.googleapis.com/auth/cloud_search.settings,然后点击 Authorize APIs 。 - 点击 Exchange authorization code for tokens 。
运行以下 curl 命令,将
[YOUR_ACCESS_TOKEN]替换为您的令牌:curl --request POST \ 'https://cloudsearch.googleapis.com/v1:initializeCustomer' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{}' \ --compressed如果成功,响应正文会包含一个
operation。 如果失败,请与 Cloud Search 支持团队联系。使用
operations.get验证初始化:curl 'https://cloudsearch.googleapis.com/v1/operations/<var>operation_name</var>?key=[YOUR_API_KEY]' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --compressed当
done为true时,初始化完成。
创建数据源
接下来,在管理控制台中创建数据源。数据源提供了一个命名空间,用于使用连接器将内容编入索引。
- 打开 Google 管理控制台。
- 点击“应用”图标。系统会显示“应用管理”页面。
- 点击 Google Workspace 。系统会显示“应用 Google Workspace 管理”页面。
- 向下滚动并点击 Cloud Search 。系统会显示“Google Workspace 设置”页面。
- 点击第三方数据源 。系统会显示“数据源”页面。
- 点击圆形黄色 + 。系统会显示“添加新的数据源”对话框。
- 在显示名称 字段中,输入“tutorial”。
- 在服务账号电子邮件地址 字段中,输入您在上一个部分中创建的服务账号的电子邮件地址。如果您不知道 服务账号的电子邮件地址,请在 服务账号 页面中查找该值。
- 点击添加 。系统会显示“已成功创建数据源”对话框。
- 点击 “确定”记下新创建的数据源的来源 ID 。来源 ID 用于配置内容连接器。
为 GitHub API 生成个人访问令牌
连接器需要经过身份验证才能访问 GitHub API,以便获得足够的配额。为简单起见,连接器利用个人访问令牌而不是 OAuth。个人令牌允许以用户身份进行身份验证,并具有与 OAuth 类似的一组有限权限。
- 登录 GitHub。
- 点击右上角的个人资料照片。系统随即会显示一个下拉菜单。
- 点击设置 。
- 点击开发者设置 。
- 点击个人访问令牌 。
- 点击 Generate personal access token (生成个人访问令牌)。
- 在备注 字段中,输入“Cloud Search tutorial”。
- 选中 public_repo 范围。
- 点击 Generate token (生成令牌)。
- 记下生成的令牌。连接器会使用该令牌调用 GitHub API,并提供 API 配额来执行索引编制。
配置连接器
创建凭据和数据源后,更新连接器配置以包含以下值:
- 在命令行中,将目录更改为
cloud-search-samples/end-to-end/connector/。 - 使用文本编辑器打开
sample-config.properties文件。 - 将
api.serviceAccountPrivateKeyFile参数设置为您之前下载的服务凭据的文件路径。 - 将
api.sourceId参数设置为您之前创建的数据源的 ID。 - 将
github.user参数设置为您的 GitHub 用户名。 - 将
github.token参数设置为您之前创建的访问令牌。 - 保存文件。
更新架构
连接器会将结构化和非结构化内容编入索引。在将数据编入索引之前,您必须更新数据源的架构。运行以下命令以更新架构:
mvn exec:java -Dexec.mainClass=com.google.cloudsearch.tutorial.SchemaTool \
-Dexec.args="-Dconfig=sample-config.properties"
运行该连接器
如需运行连接器并开始索引编制,请运行以下命令:
mvn exec:java -Dexec.mainClass=com.google.cloudsearch.tutorial.GithubConnector \
-Dexec.args="-Dconfig=sample-config.properties"
连接器的默认配置是将 googleworkspace 组织中的单个代码库编入索引。将代码库编入索引大约需要 1 分钟。
初始索引编制完成后,连接器会继续轮询代码库的更改,这些更改需要在 Cloud Search 搜索索引中反映出来。
查看代码
其余部分将介绍如何构建连接器。
启动应用
连接器的入口点是 GithubConnector 类。
main 方法会实例化 SDK 的 IndexingApplication
并启动它。
SDK 提供的 ListingConnector
实现了一种遍历策略
,该策略利用 Cloud Search 队列
来跟踪索引中项的状态。它会委托给由示例连接器实现的 GithubRepository,以从 GitHub 访问内容。
遍历 GitHub 代码库
在完全遍历期间,系统会调用 getIds()
方法,以将可能需要编入索引的项推送到队列中。
连接器可以将多个代码库或组织编入索引。为尽量减少故障的影响,系统一次遍历一个 GitHub 代码库。系统会返回一个检查点,其中包含遍历结果,其中包含在后续对 getIds() 的调用中要编入索引的代码库列表。如果发生错误,索引编制会在当前代码库中恢复,而不是从头开始。
collectRepositoryItems() 方法用于处理单个 GitHub 代码库的遍历。此方法会返回一个 ApiOperations
集合,表示要推送到队列中的项。项会作为资源名称和表示项当前状态的哈希值推送。
哈希值用于后续 GitHub 代码库遍历。此值提供了一种轻量级检查,用于确定内容是否已更改,而无需上传其他内容。连接器会盲目地将所有项排队。如果项是新的或哈希值已更改,则可以在队列中进行轮询。否则,该项将被视为未修改。
处理队列
完全遍历完成后,连接器会开始轮询队列中需要编入索引的项。系统会针对从队列中提取的每个项调用 getDoc()
方法。该方法会从 GitHub 读取项,并将其转换为适合索引编制的表示形式。
由于连接器针对可能随时更改的实时数据运行,因此 getDoc() 还会验证队列中的项是否仍然有效,并从索引中删除任何不再存在的项。
对于连接器编入索引的每个 GitHub 对象,相应的 indexItem() 方法会处理为 Cloud Search 构建项表示形式。例如,如需为内容项构建表示形式,请执行以下操作:
接下来,部署搜索界面。