如果您的数据存储区使用的是基本网站搜索,那么您商店的索引新鲜度与 Google 搜索中的新鲜度一致。
如果您在数据存储区中启用了高级网站索引编制,系统会通过以下方式刷新数据存储区中的网页:
- 自动刷新
- 手动刷新
- 基于站点地图的刷新
本页介绍了自动刷新和手动刷新。如需了解和实现基于网站地图的刷新,请参阅根据网站地图编制索引和刷新。
自动刷新
Vertex AI Search 会按如下方式执行自动刷新:
- 创建数据存储区后,系统会为包含的网页生成初始索引。
- 初次编入索引后,它会编入所有新发现的网页,并尽可能重新抓取现有网页。
- 它会定期刷新查询率为 50 次/30 天的数据存储区。
手动刷新
如果您想在启用高级网站索引编制的情况下刷新数据存储区中的特定网页,可以调用 recrawlUris
方法。您可以使用 uris
字段指定要抓取的每个网页。recrawlUris
方法是一种长时间运行的操作,会一直运行到抓取指定网页或在 24 小时后超时(以先到者为准)。如果 recrawlUris
方法超时,您可以再次调用该方法,指定仍需抓取的网页。您可以轮询 operations.get
方法,以监控重新抓取操作的状态。
重新抓取的限制
您可以抓取网页的频率和一次可以抓取的网页数量存在限制:
- 每天的通话次数。每个项目每天对
recrawlUris
方法的调用次数上限为 5 次。 - 每次调用的网页数。您可以通过调用
recrawlUris
方法指定的uris
值的数量上限为 10,000 个。
重新抓取数据存储区中的网页
您可以在启用了高级网站索引编制的数据存储区中手动抓取特定网页。
REST
如需使用命令行抓取数据存储区中的特定网页,请按以下步骤操作:
找到您的数据存储区 ID。如果您已拥有数据存储区 ID,请跳至下一步。
在 Google Cloud 控制台中,前往 Agent Builder 页面,然后在导航菜单中点击数据存储区。
点击您的数据存储区的名称。
在数据存储区的数据页面上,获取数据存储区 ID。
调用
recrawlUris
方法,使用uris
字段指定要抓取的每个网页。每个uri
都代表单个网页,即使其中包含星号 (*
) 也是如此。不支持通配符模式。curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: PROJECT_ID" \ "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/siteSearchEngine:recrawlUris" \ -d '{ "uris": [URIS] }'
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。DATA_STORE_ID
:Vertex AI Search 数据存储区的 ID。URIS
:您要抓取的网页列表,例如"https://example.com/page-1", "https://example.com/page-2", "https://example.com/page-3"
。
输出类似于以下内容:
{ "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-0123456789012345678", "metadata": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata" } }
监控重新抓取操作的状态时,将
name
值保存为operations.get
操作的输入。
监控重新抓取操作的状态
recrawlUris
方法用于抓取数据存储区中的网页,是一种长时间运行的操作,会一直运行到抓取指定网页或在 24 小时后超时(以先到者为准)。您可以通过轮询 operations.get
方法来监控此长时间运行的操作的状态,并指定 recrawlUris
方法返回的 name
值。继续轮询,直到响应指示:(1) 已抓取您的所有网页,或 (2) 在抓取您的所有网页之前操作超时。如果 recrawlUris
超时,您可以再次调用它,并指定未抓取的网站。
REST
如需使用命令行监控重新抓取操作的状态,请按以下步骤操作:
找到您的数据存储区 ID。如果您已拥有数据存储区 ID,请跳至下一步。
在 Google Cloud 控制台中,前往 Agent Builder 页面,然后在导航菜单中点击数据存储区。
点击您的数据存储区的名称。
在数据存储区的数据页面上,获取数据存储区 ID。
轮询
operations.get
方法。curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: PROJECT_ID" \ "https://discoveryengine.googleapis.com/v1alpha/OPERATION_NAME"
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。OPERATION_NAME
:操作名称,在重新抓取数据存储区中的网页中对recrawlUris
方法的调用中返回的name
字段中找到。您还可以通过列出长时间运行的操作来获取操作名称。
评估每个回答。
如果响应表明有待处理的 URI 且重新抓取操作尚未完成,则表示系统仍在抓取您的网页。继续轮询。
示例
{ "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-0123456789012345678", "metadata": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata", "createTime": "2023-09-05T22:07:28.690950Z", "updateTime": "2023-09-05T22:22:10.978843Z", "validUrisCount": 4000, "successCount": 2215, "pendingCount": 1785 }, "done": false, "response": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse", } }
响应字段可描述如下:
createTime
:表示长时间运行的操作的开始时间。updateTime
:表示长时间运行的操作元数据的上次更新时间。表示元数据每 5 分钟更新一次,直到操作完成。validUrisCount
:表示您在调用recrawlUris
方法时指定了 4,000 个有效 URI。successCount
:表示成功抓取了 2,215 个 URI。pendingCount
:表示尚有 1,785 个 URI 尚未抓取。done
:值为false
表示重新抓取操作仍在进行中。
如果响应表明没有待处理的 URI(未返回
pendingCount
字段),并且重新抓取操作已完成,则表示系统已抓取您的网页。停止轮询 - 您可以退出此过程。示例
{ "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-0123456789012345678", "metadata": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata", "createTime": "2023-09-05T22:07:28.690950Z", "updateTime": "2023-09-05T22:37:11.367998Z", "validUrisCount": 4000, "successCount": 4000 }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse" } }
响应字段可描述如下:
createTime
:表示长时间运行的操作的开始时间。updateTime
:表示长时间运行的操作元数据的上次更新时间。表示元数据每 5 分钟更新一次,直到操作完成。validUrisCount
:表示您在调用recrawlUris
方法时指定了 4,000 个有效 URI。successCount
:表示成功抓取了 4,000 个 URI。done
:值为true
表示重新抓取操作已完成。
如果响应表明有待处理的 URI 且重新抓取操作已完成,则表示重新抓取操作在抓取您的所有网页之前超时(24 小时后)。从重新抓取数据存储区中的网页重新开始。在对
recrawlUris
方法的新调用中,将operations.get
响应中的failedUris
值用作uris
字段中的值。Example.
{ "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-8765432109876543210", "metadata": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata", "createTime": "2023-09-05T22:07:28.690950Z", "updateTime": "2023-09-06T22:09:10.613751Z", "validUrisCount": 10000, "successCount": 9988, "pendingCount": 12 }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse", "failedUris": [ "https://example.com/page-9989", "https://example.com/page-9990", "https://example.com/page-9991", "https://example.com/page-9992", "https://example.com/page-9993", "https://example.com/page-9994", "https://example.com/page-9995", "https://example.com/page-9996", "https://example.com/page-9997", "https://example.com/page-9998", "https://example.com/page-9999", "https://example.com/page-10000" ], "failureSamples": [ { "uri": "https://example.com/page-9989", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9990", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9991", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9992", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9993", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9994", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9995", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9996", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9997", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] }, { "uri": "https://example.com/page-9998", "failureReasons": [ { "corpusType": "DESKTOP", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." }, { "corpusType": "MOBILE", "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours." } ] } ] } }
以下是响应字段的部分说明:
createTime
。长时间运行的操作的开始时间。updateTime
。长时间运行的操作元数据的上次更新时间。元数据会每 5 分钟更新一次,直到操作完成。validUrisCount
。表示您在调用recrawlUris
方法时指定了 10,000 个有效 URI。successCount
。表示成功抓取了 9,988 个 URI。pendingCount
。表示尚有 12 个 URI 尚未抓取。done
。值为true
表示重新抓取操作已完成。failedUris
。在重新抓取操作超时之前未抓取的 URI 的列表。failureInfo
。有关无法抓取的 URI 的信息。系统最多只会返回 10 个failureInfo
数组值,即使有超过 10 个 URI 未能抓取也是如此。errorMessage
。URI 未能抓取的原因,由corpusType
提供。如需了解详情,请参阅错误消息。
及时刷新
Google 建议您对新网页和更新后的网页执行手动刷新,以确保您拥有最新的索引。
错误消息
在监控重新抓取操作的状态时,如果重新抓取操作在您轮询 operations.get
方法时超时,operations.get
会针对未抓取的网页返回错误消息。下表列出了错误消息、错误是暂时性错误(自行解决的临时错误)还是永久性错误,以及您在重试 recrawlUris
方法之前可以执行的操作。您可以立即重试所有暂时性错误。实施补救措施后,所有暂时性错误都可以重试。
错误消息 | 这是暂时性错误吗? | 重试重新抓取之前的操作 |
---|---|---|
网页已被抓取,但 Vertex AI Search 未在 24 小时内将其编入索引 | 是 | 调用 recrawlUris 方法时,请将 operations.get 响应中的 failedUris 值用作 uris 字段中的值。 |
抓取操作被网站的 robots.txt 阻止 |
否 | 取消屏蔽您网站的 robots.txt 文件中的 URI,确保 Googlebot 用户代理被允许抓取该网站,然后重试重新抓取。如需了解详情,请参阅如何编写和提交 robots.txt 文件。
如果您无法访问 robots.txt 文件,请与网域所有者联系。 |
网页无法访问 | 否 | 检查您在调用 recrawlUris 方法时指定的 URI。请确保您提供的是字面量 URI,而不是 URI 模式。 |
抓取超时 | 是 | 调用 recrawlUris 方法时,请将 operations.get 响应中的 failedUris 值用作 uris 字段中的值。 |
网页被 Google 抓取工具拒绝 | 是 | 调用 recrawlUris 方法时,请将 operations.get 响应中的 failedUris 值用作 uris 字段中的值。 |
Google 抓取工具无法跟踪网址 | 否 | 如果有多个重定向,请使用上次重定向的 URI 并重试 |
找不到网页 (404) | 否 | 检查您在调用 recrawlUris 方法时指定的 URI。请确保您提供的是字面量 URI,而不是 URI 模式。
系统会将任何返回 `4xx` 错误代码的网页从索引中移除。 |
网页需要身份验证 | 否 | 高级网站索引编制功能不支持抓取需要身份验证的网页。 |
系统如何处理已删除的网页
删除网页后,Google 建议您手动刷新已删除的网址。
在自动刷新或手动刷新期间抓取网站数据存储区时,如果网页响应 4xx
客户端错误代码或 5xx
服务器错误代码,系统会将无响应的网页从索引中移除。