提供或自动检测架构

使用 Google Cloud 控制台导入结构化数据时,Gemini Enterprise 会自动检测架构。您可以在引擎中使用此自动检测到的架构,也可以使用 API 提供架构来指明数据的结构。

如果您提供了一个架构,之后又使用新架构对其进行了更新,则新架构必须与原始架构向后兼容。否则,架构更新会失败。

如需了解有关架构的参考信息,请参阅 dataStores.schemas

为数据存储区提供架构的方法

确定结构化数据的架构的方法有很多种。

  • 自动检测和修改 。让 Gemini Enterprise 自动检测并建议初始架构。然后,您可以通过控制台界面优化架构。Google 强烈建议您在自动检测到字段后,将关键属性映射到所有重要字段。

    按照创建第一方数据存储区中有关结构化数据的 Google Cloud 控制台说明操作时,您可以使用此方法。

  • 以 JSON 对象的形式提供架构 。以 JSON 对象的形式向 Gemini Enterprise 提供架构。您需要准备好一个正确的 JSON 对象。如需查看 JSON 对象示例,请参阅以 JSON 对象形式表示的示例架构。创建架构后,您可以根据该架构上传数据。

    这是使用 curl 命令(或程序)通过 API 创建数据存储区时可以采用的方法。如需查看示例,请参阅从 BigQuery一次性导入。另请参阅以下 说明,提供您自己的架构

自动检测和修改简介

开始导入数据时,Gemini Enterprise 会对导入的前几个文档进行采样。根据这些文档,Gemini Enterprise 会提出数据架构建议,然后您可以查看或修改该架构。

如果您想映射到关键属性的字段未出现在采样文档中,则可以在查看架构时手动添加这些字段。

如果 Gemini Enterprise 稍后在数据导入过程中遇到其他字段,则仍会导入这些字段并将其添加到架构中。如果您想在所有数据导入完毕后修改架构,请参阅更新 架构

以 JSON 对象形式表示的示例架构

您可以使用 JSON 架构格式定义自己的架构,这是一种开源声明性语言,可用于定义、注解和验证 JSON 文档。例如,以下是有效的 JSON 架构注解:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "dynamic": "true",
  "datetime_detection": true,
  "geolocation_detection": true,
  "properties": {
    "title": {
      "type": "string",
      "keyPropertyMapping": "title",
      "retrievable": true,
      "completable": true
    },
    "description": {
      "type": "string",
      "keyPropertyMapping": "description"
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "string",
        "keyPropertyMapping": "category"
      }
    },
    "uri": {
      "type": "string",
      "keyPropertyMapping": "uri"
    },
    "brand": {
      "type": "string",
      "indexable": true,
      "dynamicFacetable": true
    },
    "location": {
      "type": "geolocation",
      "indexable": true,
      "retrievable": true
    },
    "creationDate": {
      "type": "datetime",
      "indexable": true,
      "retrievable": true
    },
    "isCurrent": {
      "type": "boolean",
      "indexable": true,
      "retrievable": true
    }
  }
}

以下是此架构示例中的一些字段:

  • dynamic。如果 dynamic 设置为字符串值 "true",则导入的数据中找到的所有新属性都会被添加到架构中。如果 dynamic 设置为 "false",则导入的数据中找到的新属性会被忽略;这些属性不会添加到架构中,相应的值也不会导入。

    例如,某个架构具有两个属性:titledescription,而您上传的数据包含 titledescriptionrating 属性。如果 dynamic"true",则系统会导入评分属性和数据。如果 dynamic"false",则系统不会导入 rating 属性,但会导入 titledescription

    默认值为 "true"

  • datetime_detection。如果 datetime_detection 设置为布尔值 true,则在导入日期时间格式的数据后,架构类型会设置为 datetime。支持的格式为 RFC 3339ISO 8601

    例如:

    • 2024-08-05 08:30:00 UTC

    • 2024-08-05T08:30:00Z

    • 2024-08-05T01:30:00-07:00

    • 2024-08-05

    • 2024-08-05T08:30:00+00:00

    如果 datatime_detection 设置为布尔值 false,则在导入日期时间格式的数据后,架构类型会设置为 string

    默认值为 true

  • geolocation_detection。如果 geolocation_detection 设置为布尔值 true,则在导入地理定位格式的数据后,架构类型会设置为 geolocation。如果数据是包含纬度数和经度数的对象,或者包含地址字符串的对象,则会被检测为地理定位数据。

    例如:

    • "myLocation": {"latitude":37.42, "longitude":-122.08}

    • "myLocation": {"address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"}

    如果 geolocation_detection 设置为布尔值 false,则在导入地理定位格式的数据后,架构类型会设置为 object

    默认值为 true

  • keyPropertyMapping。一个将预定义关键字映射到文档中的关键字段的字段,有助于阐明其语义含义。值包括 titledescriptionuricategory。请注意,您的字段名称不必与 keyPropertyValues 值匹配。例如,对于您命名为 my_title 的 字段,您可以添加一个值为 titlekeyPropertyValues 字段 。

    默认情况下,标记为 keyPropertyMapping 的字段可编入索引且可搜索,但无法检索、补全或动态分面。这意味着,您无需将 indexablesearchable 字段和 keyPropertyValues 字段一起添加,即可获得预期的默认行为。

  • type。字段的类型。这是一个字符串值,可以是 datetimegeolocation 或某个原初类型(integerbooleanobjectarraynumberstring)。

  • retrievable。指示此字段是否可以在搜索响应中返回。此属性可针对类型为 numberstringbooleanintegerdatetimegeolocation 的字段进行设置。最多可将 50 个字段设置为可检索。默认情况下,用户定义的字段和 keyPropertyValues 字段不可检索。如需使某个字段 可检索,请在该字段中添加 "retrievable": true

  • indexable。指示此字段是否可在 servingConfigs.search 方法中进行过滤、分面、提升或排序。此属性可针对类型为 numberstringbooleanintegerdatetimegeolocation 的字段进行设置。 最多可将 50 个字段设置为可编入索引。默认情况下,用户定义的字段不可编入索引,但包含 keyPropertyMapping 字段的字段除外。如需使某个字段可编入索引,请在该字段中添加 "indexable": true

  • dynamicFacetable。指示此字段可用作动态分面。此属性可针对类型为 numberstringbooleaninteger 的字段进行设置。如需使某个字段可进行动态分面,该字段还必须可编入索引:在字段中添加 "dynamicFacetable": true"indexable": true

  • searchable。指示是否可以对此字段进行反向编入索引,以匹配非结构化文本查询。此属性只能针对类型为 string 的字段进行设置。最多可将 50 个字段设置为可搜索。默认情况下,用户定义的字段不可搜索,但包含 keyPropertyMapping 字段的字段除外。如需使某个字段可搜索,请在该字段中添加 "searchable": true

  • completable。指示此字段是否可以作为自动补全建议返回。此属性只能针对类型为 string 的字段进行设置。 如需使某个字段可补全,请在该字段中添加 "completable": true

以 JSON 对象的形式提供您自己的架构

如需提供您自己的架构,请创建一个包含空架构的数据存储区,然后更新该架构,并以 JSON 对象的形式提供架构。 请按照以下步骤操作:

  1. 使用以 JSON 对象形式表示的示例架构作为指南,以 JSON 对象形式准备架构。

  2. 创建数据存储区。

    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/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DATA_STORE_DISPLAY_NAME",
      "industryVertical": "INDUSTRY_VERTICAL"
    }'
    

    替换以下内容:

    • PROJECT_ID:您的项目的 ID。
    • DATA_STORE_ID:您要创建的数据存储区的 ID。此 ID 只能包含小写字母、数字、下划线和连字符。
    • DATA_STORE_DISPLAY_NAME:您要创建的数据存储区的显示名称。
    • INDUSTRY_VERTICALGENERIC
  3. 使用 schemas.patch API 方法以 JSON 对象的形式提供新的 JSON 架构。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/schemas/default_schema" \
    -d '{
      "structSchema": JSON_SCHEMA_OBJECT
    }'
    

    替换以下内容:

    • PROJECT_ID:您的项目的 ID。
    • DATA_STORE_ID:数据存储区的 ID。
    • JSON_SCHEMA_OBJECT:以 JSON 对象形式表示的新 JSON 架构。例如:

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "keyPropertyMapping": "title"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string",
              "keyPropertyMapping": "category"
            }
          },
          "uri": {
            "type": "string",
            "keyPropertyMapping": "uri"
          }
        }
      }
  4. 可选:按照查看架构定义中的过程查看架构。

后续步骤