k-NN 向量
1.0 版引入
knn_vector
数据类型允许您将向量摄取到 OpenSearch 索引中并执行各种向量搜索。knn_vector
字段具有高度可配置性,可以支持多种不同的向量工作负载。通常,knn_vector
字段可以通过提供方法定义或指定模型 ID 来构建。
示例
要将 my_vector
映射为 knn_vector
,请使用以下请求:
PUT /test-index
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"my_vector": {
"type": "knn_vector",
"dimension": 3,
"space_type": "l2"
}
}
}
}
优化向量存储
为了优化向量存储,您可以将向量工作负载模式指定为 in_memory
(优化最低延迟)或 on_disk
(优化最低成本)。on_disk
模式可减少内存使用。此外,您可以选择指定一个compression_level
来微调向量的内存消耗。
PUT test-index
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"my_vector": {
"type": "knn_vector",
"dimension": 3,
"space_type": "l2",
"mode": "on_disk",
"compression_level": "16x"
}
}
}
}
方法定义
方法定义用于底层近似 k-NN (ANN) 算法不需要训练的情况。例如,以下 knn_vector
字段指定应使用 HNSW 的 Faiss 实现进行 ANN 搜索。在索引期间,Faiss 会构建相应的 HNSW 段文件。
PUT test-index
{
"settings": {
"index": {
"knn": true,
"knn.algo_param.ef_search": 100
}
},
"mappings": {
"properties": {
"my_vector1": {
"type": "knn_vector",
"dimension": 1024,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "faiss",
"parameters": {
"ef_construction": 100,
"m": 16
}
}
}
}
}
}
您也可以在顶层指定 space_type
。
PUT test-index
{
"settings": {
"index": {
"knn": true,
"knn.algo_param.ef_search": 100
}
},
"mappings": {
"properties": {
"my_vector1": {
"type": "knn_vector",
"dimension": 1024,
"space_type": "l2",
"method": {
"name": "hnsw",
"engine": "faiss",
"parameters": {
"ef_construction": 100,
"m": 16
}
}
}
}
}
}
模型 ID
当底层 ANN 算法需要训练步骤时,会使用模型 ID。作为先决条件,必须使用训练 API 创建模型。该模型包含初始化原生库段文件所需的信息。要为向量字段配置模型,请指定 model_id
。
"my_vector": {
"type": "knn_vector",
"model_id": "my-model"
}
但是,如果您打算使用 Painless 脚本或 k-NN 评分脚本,则只需传递 dimension
。
"my_vector": {
"type": "knn_vector",
"dimension": 128
}
有关更多信息,请参阅从模型构建向量索引。
参数
下表列出了 k-NN 向量字段类型接受的参数。
参数 | 数据类型 | 描述 |
---|---|---|
type | 字符串 | 向量字段类型。必须是 knn_vector 。必填。 |
dimension | 整数 | 所用向量的大小。有效值范围为 [1, 16,000]。必填。 |
data_type | 字符串 | 向量元素的数据类型。有效值为 binary 、byte 和 float 。可选。默认值为 float 。 |
space_type | 字符串 | 用于计算向量之间距离的向量空间。有效值为 l1 、l2 、linf 、cosinesimil 、innerproduct 、hamming 和 hammingbit 。并非所有方法/引擎组合都支持所有这些空间。有关支持的空间列表,请参阅特定引擎的部分。注意:此值也可以在 method 中指定。可选。有关更多信息,请参阅空间。 |
mode | 字符串 | 根据您的优先级(低延迟或低成本)为 k-NN 参数设置适当的默认值。有效值为 in_memory 和 on_disk 。可选。默认值为 in_memory 。有关更多信息,请参阅内存优化向量。 |
compression_level | 字符串 | 选择一个量化编码器,以给定因子减少向量内存消耗。有效值为 1x 、2x 、4x 、8x 、16x 和 32x 。可选。有关更多信息,请参阅内存优化向量。 |
method | 对象 | 用于在索引时组织向量数据并在搜索时搜索向量数据的算法。当 ANN 算法不需要训练时使用。可选。有关更多信息,请参阅方法和引擎。 |
model_id | 字符串 | 已训练模型的模型 ID。当 ANN 算法需要训练时使用。请参阅模型 ID。可选。 |