创建向量索引
在 OpenSearch 中创建向量索引涉及一个共同的核心过程,其具体变化取决于向量搜索的类型。本指南概述了所有向量索引共有的关键要素,以及支持的用例特有的差异。
在开始之前,请查看生成嵌入的选项,以帮助您根据用例选择合适的选项。有关更多信息,请参阅准备向量。
概述
要创建向量索引,请在settings
中将index.knn
参数设置为true
。
PUT /test-index
{
"settings": {
"index.knn": true
},
"mappings": {
"properties": {
"my_vector": {
"type": "knn_vector",
"dimension": 3,
"space_type": "l2",
"mode": "on_disk",
"method": {
"name": "hnsw"
}
}
}
}
}
创建向量索引涉及以下关键步骤:
-
启用 k-最近邻 (k-NN) 搜索:在索引设置中将
index.knn
设置为true
,以启用 k-NN 搜索功能。 -
定义向量字段:指定将存储向量数据的字段。在 OpenSearch 中定义
knn_vector
字段时,您可以选择不同的数据类型来平衡存储要求和性能。默认情况下,k-NN 向量是浮点向量,但您也可以选择字节或二进制向量以实现更高效的存储。有关更多信息,请参阅k-NN 向量。 -
指定维度:设置
dimension
属性以匹配所用向量的大小。 -
(可选)选择空间类型:选择用于相似性比较的距离度量,例如
l2
(欧几里得距离)或cosinesimil
。有关更多信息,请参阅空间。 -
(可选)选择工作负载模式和/或压缩级别:选择工作负载模式和/或压缩级别以优化向量存储。有关更多信息,请参阅优化向量存储。
-
(可选,高级)选择方法:配置用于优化向量搜索性能的索引方法,例如 HNSW 或 IVF。有关更多信息,请参阅方法和引擎。
实现选项
根据您的向量生成方法,选择以下实现选项之一:
- 存储在 OpenSearch 外部生成的原始向量或嵌入:将预生成的嵌入或原始向量摄取到您的索引中以进行原始向量搜索。
- 在摄取过程中将数据转换为嵌入:摄取将在 OpenSearch 中转换为向量嵌入的文本,以便使用机器学习 (ML) 模型执行语义搜索。
下表总结了支持用例的关键索引配置差异。
功能 | 向量字段类型 | 摄入管道 | 转换 | 用例 |
---|---|---|---|---|
存储在 OpenSearch 外部生成的原始向量或嵌入 | knn_vector | 不要求 | 直接摄取 | 原始向量搜索 |
在摄取过程中将数据转换为嵌入 | knn_vector | 必需 | 自动生成的向量 | AI 搜索 自动化嵌入生成可减少数据预处理,并提供更托管的向量搜索体验。 |
存储在 OpenSearch 外部生成的原始向量或嵌入
要将原始向量摄取到索引中,请配置一个向量字段(在此请求中为my_vector
)并指定其dimension
。
PUT /my-raw-vector-index
{
"settings": {
"index.knn": true
},
"mappings": {
"properties": {
"my_vector": {
"type": "knn_vector",
"dimension": 3
}
}
}
}
在摄取过程中将数据转换为嵌入
要在摄取过程中自动生成嵌入,请配置一个摄取管道,其中包含嵌入模型的模型 ID。有关配置模型的更多信息,请参阅集成机器学习模型。
指定field_map
以定义输入文本的源字段和存储嵌入的目标字段。在此示例中,text
字段中的文本将转换为嵌入并存储在passage_embedding
中。
PUT /_ingest/pipeline/auto-embed-pipeline
{
"description": "AI search ingest pipeline that automatically converts text to embeddings",
"processors": [
{
"text_embedding": {
"model_id": "mBGzipQB2gmRjlv_dOoB",
"field_map": {
"input_text": "output_embedding"
}
}
}
]
}
有关更多信息,请参阅文本嵌入处理器。
创建索引时,将管道指定为default_pipeline
。确保dimension
与管道中配置的模型的维度匹配。
PUT /my-ai-search-index
{
"settings": {
"index.knn": true,
"default_pipeline": "auto-embed-pipeline"
},
"mappings": {
"properties": {
"input_text": {
"type": "text"
},
"output_embedding": {
"type": "knn_vector",
"dimension": 768
}
}
}
}
处理稀疏向量
OpenSearch 也支持稀疏向量。有关更多信息,请参阅神经稀疏搜索。