刷新网页

如果您的数据存储使用的是基本网站搜索,那么您商店的索引新鲜度与 Google 搜索中的新鲜度一致。

如果您在数据存储区中启用了高级网站索引编制,系统会通过以下方式刷新数据存储区中的网页:

  • 自动刷新
  • 手动刷新

本页面介绍了这两种方法。

自动刷新

Vertex AI Search 按如下方式执行自动刷新:

  • 创建数据存储区后,它会为包含的内容生成初始索引, 页面。
  • 初次编入索引后,它会尽力编入索引中所有新发现的网页,并重新抓取现有网页。
  • 它会定期刷新查询率为 50 次/30 天的数据存储区。

手动刷新

如果您想在启用高级网站索引编制的情况下刷新数据存储区中的特定网页,可以调用 recrawlUris 方法。您可以使用 uris 字段指定要抓取的每个网页。recrawlUris 方法是长时间运行的 操作,直到您指定的网页 或在 24 小时后超时(二者取其先)。如果 recrawlUris 方法超时,您可以再次调用该方法,指定仍需抓取的网页。您可以轮询 operations.get 方法来监控重新抓取操作的状态

重新抓取的限制

您可以抓取网页的频率和一次可以抓取的网页数量存在限制:

  • 每天的通话次数。recrawlUris 的调用次数上限 允许的方法为每个项目每天 5 次。
  • 每次调用浏览的网页数。您最多可以使用 uris 个值 recrawlUris 方法指定 10,000。

重新抓取数据存储区中的网页

您可以在数据存储区中手动抓取包含 已启用高级网站索引编制功能。

REST

要使用命令行抓取数据存储区中的特定网页,请按照 具体步骤:

  1. 查找数据存储区 ID。如果您已有数据存储区 ID,请跳至下一步。

    1. 在 Google Cloud 控制台中,前往 Agent Builder 页面,然后在导航菜单中点击数据存储区

      转到“数据存储区”页面

    2. 点击您的数据存储区的名称。

    3. 在数据存储区的数据页面上,获取数据存储区 ID。

  2. 调用 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"
      }
    }
    
  3. 监控重新抓取操作的状态时,将 name 值保存为 operations.get 操作的输入。

监控重新抓取操作的状态

recrawlUris 方法用于抓取数据存储区中的网页,是一种长时间运行的操作,会一直运行到抓取指定网页或在 24 小时后超时(以先到者为准)。您可以监控 这个长时间运行的操作的状态是:轮询 operations.get 方法,并指定name recrawlUris 方法。继续轮询,直到响应表明以下任一情况: (1) 您的所有网页都被抓取,或 (2) 操作超时,而之前所有网页 您的 个网页(共 个)被抓取。如果 recrawlUris 超时,您可以再次调用它,并指定未抓取的网站。

REST

要使用命令行监控重新抓取操作的状态,请按照 具体步骤:

  1. 找到您的数据存储区 ID。如果您已有数据存储区 ID,请跳至下一步。

    1. 在 Google Cloud 控制台中,前往 Agent Builder 页面,然后在导航菜单中点击数据存储区

      前往“数据存储区”页面

    2. 点击您的数据存储区的名称。

    3. 在数据存储区的数据页面上,获取数据存储区 ID。

  2. 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"
    

    替换以下内容:

  3. 评估每个回答。

    • 如果响应指示有待处理的 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:表示长时间运行的操作元数据上次发送的时间 已更新。表示元数据每五分钟更新一次,直到 操作完成时。
      • 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:表示长时间运行的操作元数据上次发送的时间 已更新。表示元数据每五分钟更新一次,直到 操作完成时。
      • validUrisCount:表示您在 对 recrawlUris 方法的调用。
      • successCount:表示成功抓取了 4,000 个 URI。
      • done:值为 true 表示重新抓取操作 完成。
  4. 如果响应表明存在待处理的 URI 并且需要重新抓取 操作完成后,重新抓取操作超时(24 小时后) 在系统抓取您的所有网页之前。从重新抓取 数据存储区中的网页。使用 failedUris operations.get 响应中与 uris 字段中的值对应的值 (在对 recrawlUris 方法的新调用中)。

    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。长时间运行的操作元数据上次更新 已更新。元数据每五分钟更新一次,直到 操作完成时。
    • validUrisCount。表示您在 对 recrawlUris 方法的调用。
    • 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 服务器错误代码,系统会将无响应的网页从索引中移除。