使用 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",则导入的数据中找到的新属性会被忽略;这些属性不会添加到架构中,相应的值也不会导入。例如,某个架构具有两个属性:
title和description,而您上传的数据包含title、description和rating属性。如果dynamic为"true",则系统会导入评分属性和数据。如果dynamic为"false",则系统不会导入rating属性,但会导入title和description。默认值为
"true"。datetime_detection。如果datetime_detection设置为布尔值true,则在导入日期时间格式的数据后,架构类型会设置为datetime。支持的格式为 RFC 3339 和 ISO 8601。例如:
2024-08-05 08:30:00 UTC2024-08-05T08:30:00Z2024-08-05T01:30:00-07:002024-08-052024-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。一个将预定义关键字映射到文档中的关键字段的字段,有助于阐明其语义含义。值包括title、description、uri和category。请注意,您的字段名称不必与keyPropertyValues值匹配。例如,对于您命名为my_title的 字段,您可以添加一个值为title的keyPropertyValues字段 。默认情况下,标记为
keyPropertyMapping的字段可编入索引且可搜索,但无法检索、补全或动态分面。这意味着,您无需将indexable或searchable字段和keyPropertyValues字段一起添加,即可获得预期的默认行为。type。字段的类型。这是一个字符串值,可以是datetime、geolocation或某个原初类型(integer、boolean、object、array、number或string)。retrievable。指示此字段是否可以在搜索响应中返回。此属性可针对类型为number、string、boolean、integer、datetime和geolocation的字段进行设置。最多可将 50 个字段设置为可检索。默认情况下,用户定义的字段和keyPropertyValues字段不可检索。如需使某个字段 可检索,请在该字段中添加"retrievable": true。indexable。指示此字段是否可在servingConfigs.search方法中进行过滤、分面、提升或排序。此属性可针对类型为number、string、boolean、integer、datetime和geolocation的字段进行设置。 最多可将 50 个字段设置为可编入索引。默认情况下,用户定义的字段不可编入索引,但包含keyPropertyMapping字段的字段除外。如需使某个字段可编入索引,请在该字段中添加"indexable": true。dynamicFacetable。指示此字段可用作动态分面。此属性可针对类型为number、string、boolean和integer的字段进行设置。如需使某个字段可进行动态分面,该字段还必须可编入索引:在字段中添加"dynamicFacetable": true和"indexable": true。searchable。指示是否可以对此字段进行反向编入索引,以匹配非结构化文本查询。此属性只能针对类型为string的字段进行设置。最多可将 50 个字段设置为可搜索。默认情况下,用户定义的字段不可搜索,但包含keyPropertyMapping字段的字段除外。如需使某个字段可搜索,请在该字段中添加"searchable": true。completable。指示此字段是否可以作为自动补全建议返回。此属性只能针对类型为string的字段进行设置。 如需使某个字段可补全,请在该字段中添加"completable": true。
以 JSON 对象的形式提供您自己的架构
如需提供您自己的架构,请创建一个包含空架构的数据存储区,然后更新该架构,并以 JSON 对象的形式提供架构。 请按照以下步骤操作:
使用以 JSON 对象形式表示的示例架构作为指南,以 JSON 对象形式准备架构。
创建数据存储区。
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_VERTICAL:GENERIC
使用 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" } } }
可选:按照查看架构定义中的过程查看架构。