你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
创建矢量索引
本文内容
在 Azure AI 搜索中,矢量存储 具有定义矢量和非矢量字段的索引架构、用于创建嵌入空间的算法的矢量配置,以及查询请求中使用的矢量字段定义的设置。 创建或更新索引 API 将创建矢量存储。
请按照以下步骤为矢量数据编制索引:
本文解释了工作流,并使用 REST 来说明每个步骤。 每一个最新版本的 REST API 都添加了新功能。 了解了基本工作流和每个 API 版本提供的功能,请继续使用 azure-search-vector-samples 存储库中的 Azure SDK 代码示例,以获得在测试和生产代码中使用这些功能的指导。
先决条件
在任何区域内、任何层级上的 Azure AI 搜索。 大多数现有服务都支持矢量搜索。 对于 2019 年 1 月之前创建的服务,有一小部分无法创建矢量索引。 在这种情况下,必须创建新服务。
如果使用的是 Azure SDK 和 REST API 的正式发布版,则在源文档中预先存在矢量嵌入。 有关详细信息,请参阅生成嵌入 。 替代项是集成矢量化(预览) 。
应该了解用于创建嵌入的模型的维度限制,以及如何计算相似性。 在 Azure OpenAI 中,对于 text-embedding-ada-002 ,数值矢量的长度为 1536。 相似性是使用 cosine
计算的。 有效值为 2 到 3072 维度。
你应该知道如何创建索引 。 架构必须包含文档键的字段、要搜索或筛选的其他字段,以及索引编制和查询期间所需行为的其他配置。
准备为文档编制索引
在编制索引之前,请汇编一个包含矢量和非矢量数据字段的文档有效负载。 文档结构必须符合索引架构。
确保文档:
提供用于唯一标识每个文档的字段或元数据属性。 所有搜索索引都需要文档键。 若要满足文档键要求,源文档必须包含一个可以在索引中唯一标识它的字段或属性。 此源字段必须映射到搜索索引中类型为 Edm.String
和 key=true
的索引字段。
在源字段中提供矢量数据(单精度浮点数的数组)。
矢量字段包含嵌入模型生成的数字数据,每个字段包含一个嵌入。 我们建议使用 Azure OpenAI 中的嵌入模型,例如用于文本文档的 text-embedding-ada-002 或用于图像的图像检索 REST API 。 仅支持索引顶级矢量字段:当前不支持矢量子字段。
为其他字段提供人类可读的字母数字内容,以用于查询响应,以及在同一请求中包含全文搜索或语义排名的混合查询方案。
搜索索引应包含你想要支持的所有查询方案的字段和内容。 假设你想要搜索或筛选产品名称、版本、元数据或地址。 在这种情况下,相似性搜索并不是特别有用。 关键字搜索、地理搜索或筛选器是更好的选择。 包含矢量和非矢量数据综合字段集合的搜索索引为查询构造和响应组合提供了最大的灵活性。
本文的加载矢量数据 部分提供了包含矢量和非矢量字段的文档有效负载的简短示例。
添加矢量搜索配置
矢量配置指定在索引编制过程中使用的矢量搜索算法 和参数,以便在矢量节点之间创建“最近邻域”信息:
如果在字段中选择 HNSW,则可以在查询时选择穷举 KNN。 但反之则不然:如果选择穷举,则以后将无法请求 HNSW 搜索,因为不存在启用近似搜索的额外数据结构。
需要预览版到稳定版的迁移指南? 请参阅升级 REST API 了解相关步骤。
2023-11-01 已正式发布。 它支持矢量配置,具有:
vectorSearch.algorithms
,具有用于索引和评分的参数。
用于对算法配置进行多种组合的 vectorSearch.profiles
。
请务必制定矢量化内容 的策略。 稳定版本不提供用于内置编码的技能 或矢量器 。
使用创建或更新索引 API 创建索引。
在索引中添加 vectorSearch
节,以指定用于创建嵌入空间的搜索算法。
"vectorSearch": {
"algorithms": [
{
"name": "my-hnsw-config-1",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
},
{
"name": "my-hnsw-config-2",
"kind": "hnsw",
"hnswParameters": {
"m": 8,
"efConstruction": 800,
"efSearch": 800,
"metric": "cosine"
}
},
{
"name": "my-eknn-config",
"kind": "exhaustiveKnn",
"exhaustiveKnnParameters": {
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-default-vector-profile",
"algorithm": "my-hnsw-config-2"
}
]
}
要点 :
配置的名称。 该名称在索引中必须唯一。
profiles
添加一个抽象层以容纳更丰富的定义。 配置文件在 vectorSearch
中定义,然后在每个矢量字段中按名称引用。
"hnsw"
和 "exhaustiveKnn"
是近似最近邻域 (ANN) 算法,用于在索引编制期间组织矢量内容。
"m"
(双向链接计数)默认值为 4。 范围为 4 到 10。 较低的值应在结果中返回较少的干扰数据。
"efConstruction"
默认值为 400。 范围为 100 到 1,000。 它是索引编制期间使用的最近邻域数量。
"efSearch"
默认值为 500。 范围为 100 到 1,000。 它是搜索期间使用的最近邻域数量。
如果使用的是 Azure OpenAI,则 "metric"
应为“cosine”,否则请使用与你正在使用的嵌入模型关联的相似性指标。 支持的值为 cosine
、dotProduct
、euclidean
。
2024-03-01-Preview 新增标量量化 和储存节省选项。
将 vectorSearch.compressions
与标量量化和过度采样的属性相加。
添加窄数据类型:Float16
、Int16
和 Int8
,以实现更高效的矢量存储。
包括 2023-10-01-preview 集成矢量化 。
包括 2023-11-01 vectorSearch.algorithms
和 vectorSearch.profiles
。
使用创建或更新索引预览版 REST API 创建索引。
在索引中添加 vectorSearch
部分,指定用于创建嵌入空间的压缩设置和搜索算法。 有关详细信息,请参阅配置矢量量化和减少存储 。
"vectorSearch": {
"compressions": [
{
"name": "my-scalar-quantization",
"kind": "scalarQuantization",
"rerankWithOriginalVectors": true,
"defaultOversampling": 10.0,
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
}
}
],
"algorithms": [
{
"name": "my-hnsw-config-1",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
},
{
"name": "my-hnsw-config-2",
"kind": "hnsw",
"hnswParameters": {
"m": 8,
"efConstruction": 800,
"efSearch": 800,
"metric": "cosine"
}
},
{
"name": "my-eknn-config",
"kind": "exhaustiveKnn",
"exhaustiveKnnParameters": {
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-default-vector-profile",
"algorithm": "my-hnsw-config-2"
}
]
}
要点 :
vectorSearch.compressions.kind
必须为 scalarQuantization
。
rerankWithOriginalVectors
使用原始的未压缩向量来重新计算相似性,并对初始搜索查询返回的顶部结果进行重新排名。 即使 stored
为 false,未压缩的向量也存在于搜索索引中。 此属性是可选的。 默认值为 true。
defaultOversampling
将考虑更广泛的潜在结果,以抵消量化导致的信息减少。 潜在结果的公式由查询中的 k
和过采样乘数组成。 例如,如果查询指定 k
为 5,并且过采样为 20,则查询实际上会请求 100 个文档用于重新排序,并为此使用原始未压缩向量。 仅返回前 k
个重新排序的结果。 此属性是可选的。 默认值为 4。
quantizedDataType
必须设置为 int8
。 这是目前唯一支持的基元数据类型。 此属性是可选的。 默认值为 int8
。
2023-10-01-Preview 增加了内部矢量化 ,但矢量搜索配置(vectorSearch
结构)与 2023-11-01 版本基本相同。
使用创建或更新索引预览版 REST API 创建索引。
在索引中添加 vectorSearch
节,以指定用于创建嵌入空间的搜索算法。
"vectorSearch": {
"algorithms": [
{
"name": "my-hnsw-config-1",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
},
{
"name": "my-hnsw-config-2",
"kind": "hnsw",
"hnswParameters": {
"m": 8,
"efConstruction": 800,
"efSearch": 800,
"metric": "cosine"
}
},
{
"name": "my-eknn-config",
"kind": "exhaustiveKnn",
"exhaustiveKnnParameters": {
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-default-vector-profile",
"algorithm": "my-hnsw-config-2"
}
]
}
要点 :
配置的名称。 该名称在索引中必须唯一。
profiles
是此预览版中的新增功能。 它们添加一个抽象层以容纳更丰富的定义。 配置文件在 vectorSearch
中定义,然后在每个矢量字段中作为属性定义。
hnsw
和 "exhaustiveKnn"
是近似最近邻域 (ANN) 算法,用于在索引编制期间组织矢量内容。
m
(双向链接计数)默认值为 4。 范围为 4 到 10。 较低的值应在结果中返回较少的干扰数据。
efConstruction
默认值为 400。 范围为 100 到 1,000。 它是索引编制期间使用的最近邻域数量。
efSearch
默认值为 500。 范围为 100 到 1,000。 它是搜索期间使用的最近邻域数量。
如果使用的是 Azure OpenAI,则 metric
应为“cosine”,否则请使用与你正在使用的嵌入模型关联的相似性指标。 支持的值为 cosine
、dotProduct
、euclidean
。
重要
2023-07-01-Preview 是第一个支持向量的 REST API 版本。 它使用了在较新预览中被替换的过时结构。 建议迁移到更新的 REST API 。
此预览添加了:
用于指定 HNSW 算法的 vectorSearch.algorithmConfigurations
。
用于为矢量内容编制索引的 hnsw
最近邻域算法。
使用创建或更新索引 REST API 创建索引。
在索引中添加 vectorSearch
节,以指定用于创建嵌入空间的搜索算法。
"vectorSearch": {
"algorithmConfigurations": [
{
"name": "vectorConfig",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]
}
要点 :
配置的名称。 该名称在索引中必须唯一。
hnsw
是近似最近邻域 (ANN) 算法,用于在索引编制期间创建邻近图。 此 API 版本仅支持分层可导航小世界 (HNSW)。
m
(双向链接计数)默认值为 4。 范围为 4 到 10。 较低的值应在结果中返回较少的干扰数据。
efConstruction
默认值为 400。 范围为 100 到 1,000。 它是索引编制期间使用的最近邻域数量。
efSearch
默认值为 500。 范围为 100 到 1,000。 它是搜索期间使用的最近邻域数量。
如果使用的是 Azure OpenAI,则 metric
应为“cosine”,否则请使用与你正在使用的嵌入模型关联的相似性指标。 支持的值为 cosine
、dotProduct
、euclidean
。
将矢量字段添加到字段集合
字段集合必须包含文档键字段、矢量字段以及混合搜索方案所需的任何其他字段。
矢量字段的特征在于其数据类型 、基于用于输出矢量的嵌入模型 dimensions
属性以及矢量配置文件。
如果你只想使用正式发布的功能,请使用此版本。
使用创建或更新索引 创建索引。
使用以下属性定义矢量字段。 可为每个字段存储一个生成的嵌入。 对于每个矢量字段:
type
在此 API 版本中必须为 Collection(Edm.Single)
。
dimensions
是嵌入模型生成的维度数。 对于 text-embedding-ada-002,它是 1536。
vectorSearchProfile
是在索引中其他位置定义的配置文件的名称。
searchable
必须为 true。
retrievable
可以为 true 或 false。 True 以纯文本形式返回原始矢量(1536 个)并消耗存储空间。 如果你要将矢量结果传递给下游应用,请设置为 true。
filterable
、facetable
、sortable
必须为 false。
如果要在向量查询 调用预筛选或后期筛选 ,请将可筛选的非函数字段添加到集合,例如 filterable
设置为 true 的“title”。
添加其他字段用于定义你要编制索引的文本内容的主旨和结构。 至少需要一个文档键。
还应该添加在查询或其响应中有用的字段。 以下示例显示了标题和内容(等效于矢量)的矢量字段(“titleVector”、“contentVector”)。 它还提供了等效文本内容的字段(“title”、“content”),可用于在搜索结果中进行排序、筛选和读取。
以下示例显示了字段集合:
PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2023-11-01&allowIndexDowntime=true
Content-Type: application/json
api-key: {{admin-api-key}}
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"filterable": true
},
{
"name": "title",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"sortable": true,
"retrievable": true
},
{
"name": "titleVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchProfile": "my-default-vector-profile"
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchProfile": "my-default-vector-profile"
}
],
"vectorSearch": {
"algorithms": [
{
"name": "my-hnsw-config-1",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-default-vector-profile",
"algorithm": "my-hnsw-config-1"
}
]
}
}
此 API 版本基于 2023-10-01-preview,增加了对窄数据类型 和标量量化 的支持。
使用创建或更新索引预览 REST API 来定义索引的字段集合。
将矢量字段添加到字段集合。 可为每个文档字段存储一个生成的嵌入。 对于每个矢量字段:
可以是 type
、Collection(Edm.Single)
、Collection(Edm.Half)
、Collection(Edm.Int16)
、Collection(Edm.SByte)
。
dimensions
是嵌入模型生成的维度数。 对于 text-embedding-ada-002,它是 1536。
vectorSearchProfile
是在索引中其他位置定义的配置文件的名称。
searchable
必须为 true。
retrievable
可以为 true 或 false。 True 以纯文本形式返回原始矢量(1536 个)并消耗存储空间。 如果你要将矢量结果传递给下游应用,请设置为 true。 如果 stored
为 false,则需要 false。
stored
是新的布尔属性,仅适用于矢量字段。 True 存储搜索结果中返回的矢量副本。 False 在索引期间中放弃该副本。 可以搜索矢量,但不能在结果中返回矢量。
filterable
、facetable
、sortable
必须为 false。
以下示例显示了字段集合:
PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2024-03-01-Preview&allowIndexDowntime=true
Content-Type: application/json
api-key: {{admin-api-key}}
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"filterable": true
},
{
"name": "firstVectorfield-float32-embeddings",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": false,
"stored": false,
"dimensions": 1536,
"vectorSearchProfile": "my-default-vector-profile"
},
{
"name": "secondVectorfield-float16-embeddings",
"type": "Collection(Edm.Half)",
"searchable": true,
"retrievable": false,
"stored": false,
"vectorSearchProfile": "my-default-vector-profile"
},
{
"name": "thirdVectorfield-int8-embeddings-for-my-custom-quantization-output",
"type": "Collection(Edm.SByte)",
"searchable": true,
"retrievable": false,
"stored": false,
"vectorSearchProfile": "my-default-vector-profile"
},
],
"vectorSearch": {
"algorithms": [
{
"name": "my-hnsw-config-1",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-default-vector-profile",
"algorithm": "my-hnsw-config-1"
}
]
}
}
在以下 REST API 示例中,“title”和“content”包含全文搜索和语义排名中使用的文本内容,而“titleVector”和“contentVector”包含矢量数据。 在此 API 版本中,可以使用索引器和技能组来使用集成矢量化 填充矢量字段。 索引定义不会更改,但可以将索引器和技能添加到解决方案中以填充字段。
使用创建或更新索引预览 REST API 来定义索引的字段集合。
将矢量字段添加到字段集合。 可为每个文档字段存储一个生成的嵌入。 对于每个矢量字段:
type
必须为 Collection(Edm.Single)
。
dimensions
是嵌入模型生成的维度数。 对于 text-embedding-ada-002,它是 1536。
vectorSearchProfile
是在索引中其他位置定义的配置文件的名称。
searchable
必须为 true。
retrievable
可以为 true 或 false。 True 以纯文本形式返回原始矢量(1536 个)并消耗存储空间。 如果你要将矢量结果传递给下游应用,请设置为 true。
filterable
、facetable
、sortable
必须为 false。
如果要在 [vector query](vector-search-how-to-query.md 调用预筛选或后期筛选 ,请将可筛选的非函数字段添加到集合,例如 filterable
设置为 true 的“title”
添加其他字段用于定义你要编制索引的文本内容的主旨和结构。 至少需要一个文档键。
还应该添加在查询或其响应中有用的字段。 以下示例显示了标题和内容(等效于矢量)的矢量字段(“titleVector”、“contentVector”)。 它还提供了等效文本内容的字段(“title”、“content”),可用于在搜索结果中进行排序、筛选和读取。
以下示例显示了字段集合:
PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2023-10-01-Preview&allowIndexDowntime=true
Content-Type: application/json
api-key: {{admin-api-key}}
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"filterable": true
},
{
"name": "title",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"sortable": true,
"retrievable": true
},
{
"name": "titleVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchProfile": "my-default-vector-profile"
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchProfile": "my-default-vector-profile"
}
],
"vectorSearch": {
"algorithms": [
{
"name": "my-hnsw-config-1",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "my-default-vector-profile",
"algorithm": "my-hnsw-config-1"
}
]
}
}
2023-07-01-Preview 是第一个支持矢量案例的 REST API 版本。
在下面的 REST API 示例中,“title”和“content”包含全文搜索和语义排名中使用的文本内容,而“titleVector”和“contentVector”包含外部生成的矢量数据。
使用创建或更新索引预览 REST API 来定义索引的字段集合。
将矢量字段添加到字段集合。 可为每个文档字段存储一个生成的嵌入。 对于每个矢量字段:
分配 Collection(Edm.Single)
数据类型。
提供矢量搜索算法配置的名称。
提供嵌入模型生成的维度数。
设置属性:
“searchable”必须为“true”。
将“retrievable”设置为“true”可以显示原始矢量(例如,作为验证步骤),但这样会增大存储使用量。 如果你不需要返回原始矢量,请设置为“false”。 如果你不需要返回查询的矢量,但要将矢量结果传递给下游应用,请将“retrievable”设置为“true”。
“filterable”、“facetable”、“sortable”属性必须为“false”。 不要将其设置为“true”,因为这些行为不适用于矢量字段的上下文,因此请求将会失败。
添加其他字段用于定义你要编制索引的文本内容的主旨和结构。 至少需要一个文档键。
还应该添加在查询或其响应中有用的字段。 以下示例显示了标题和内容(等效于矢量)的矢量字段(“titleVector”、“contentVector”)。 它还提供了等效文本内容的字段(“title”、“content”),可用于在搜索结果中进行排序、筛选和读取。
包含所述元素的索引定义如下:
PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2023-07-01-Preview&allowIndexDowntime=true
Content-Type: application/json
api-key: {{admin-api-key}}
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"filterable": true
},
{
"name": "title",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"sortable": true,
"retrievable": true
},
{
"name": "titleVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchConfiguration": "vectorConfig"
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchConfiguration": "vectorConfig"
}
],
"vectorSearch": {
"algorithmConfigurations": [
{
"name": "vectorConfig",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]
}
}
加载要编制索引的矢量数据
你提供的要编制索引的内容必须符合索引架构,并包含文档键的唯一字符串值。 预矢量化数据将加载到一个或多个矢量字段中,这些矢量字段可与包含字母数字内容的其他字段共存。
可以使用推送或拉取方法 进行数据引入。
使用文档 - 索引 将矢量和非矢量数据加载到索引中。 用于索引的推送 API 在所有稳定版本和预览版本中都是相同的。 使用以下任意 API 加载文档:
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/index?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"value": [
{
"id": "1",
"title": "Azure App Service",
"content": "Azure App Service is a fully managed platform for building, deploying, and scaling web apps. You can host web apps, mobile app backends, and RESTful APIs. It supports a variety of programming languages and frameworks, such as .NET, Java, Node.js, Python, and PHP. The service offers built-in auto-scaling and load balancing capabilities. It also provides integration with other Azure services, such as Azure DevOps, GitHub, and Bitbucket.",
"category": "Web",
"titleVector": [
-0.02250031754374504,
. . .
],
"contentVector": [
-0.024740582332015038,
. . .
],
"@search.action": "upload"
},
{
"id": "2",
"title": "Azure Functions",
"content": "Azure Functions is a serverless compute service that enables you to run code on-demand without having to manage infrastructure. It allows you to build and deploy event-driven applications that automatically scale with your workload. Functions support various languages, including C#, F#, Node.js, Python, and Java. It offers a variety of triggers and bindings to integrate with other Azure services and external services. You only pay for the compute time you consume.",
"category": "Compute",
"titleVector": [
-0.020159931853413582,
. . .
],
"contentVector": [
-0.02780858241021633,
. . .
],
"@search.action": "upload"
}
. . .
]
}
所有较新的预览版本都使用拉取 API(索引器和技能组)在索引和查询时进行集成矢量化。
索引器可以检索源文档中的矢量字段并为其编制索引,前提是索引架构符合矢量字段要求和预览版 REST API。 数据源以数据源支持的任何格式(例如 JSON 中的字符串)提供矢量。 索引器假设类型为 Collection(Edm.Single)
的字段包含矢量,并将该内容编制为矢量索引。
字段映射行为不会变化,矢量检测也不会变化。 文本索引编制的行为也适用于矢量。
如果矢量数据源自文件,我们建议根据数据的形状使用非默认的 parsingMode
,例如 json
、jsonLines
或 csv
。
对于数据源,Azure blob 索引器 和具有上述 parsingMode 之一的 Azure Cosmos DB for NoSQL 索引器 已经过测试并确认可以工作。
Azure SQL 不提供将集合原生存储为单个 SQL 列的方法。 目前尚未找到解决方法。
数据源中所有矢量的维度必须相同,并且与其映射到的字段的索引定义相匹配。 索引器会对任何不匹配的文档引发错误。
技能和矢量器用于生成嵌入。 要在索引期间进行矢量化,请从以下技能中进行选择:
检查矢量内容的索引
要进行验证,可以使用 Azure 门户中的搜索资源管理器或 REST API 调用来查询索引。 由于 Azure AI 搜索无法将矢量转换为人类可读的文本,因此请尝试从同一文档中返回提供匹配证据的字段。 例如,如果矢量查询针对“titleVector”字段,则你可以为搜索结果选择“title”。
必须将字段的属性设置为“retrievable”才能将其包含在结果中。
可以使用搜索资源管理器 来查询索引。 搜索资源管理器有两个视图:查询视图(默认)和 JSON 视图。
以下 REST API 示例是一个矢量查询,但它仅返回非矢量字段(标题、内容、类别)。 只有标记为“retrievable”的字段才能在搜索结果中返回。
POST https://my-search-service.search.windows.net/indexes/my-index/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vector": {
"value": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "contentVector",
"k": 5
},
"select": "title, content, category"
}
更新矢量存储
若要更新矢量存储,请修改架构,并在必要时重新加载文档以填充新字段。 用于架构更新的 API 包括创建或更新索引 (REST) 、Azure SDK for .NET 中的 CreateOrUpdateIndex 、Azure SDK for Python 中的create_or_update_index ,以及其他 Azure SDK 中的类似方法。
有关更新索引的标准指南,请参见删除并重新生成索引 。
要点包括:
后续步骤
接下来,我们建议在搜索索引中查询矢量数据 。
azure-search-vector 存储库中的代码示例演示了包括架构定义、矢量化、索引和查询的端到端工作流。
有可参阅的 Python 、C# 和 JavaScript 的演示代码。