Link Search Menu Expand Document Documentation Menu

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 字符串 向量元素的数据类型。有效值为 binarybytefloat。可选。默认值为 float
space_type 字符串 用于计算向量之间距离的向量空间。有效值为 l1l2linfcosinesimilinnerproducthamminghammingbit。并非所有方法/引擎组合都支持所有这些空间。有关支持的空间列表,请参阅特定引擎的部分。注意:此值也可以在 method 中指定。可选。有关更多信息,请参阅空间
mode 字符串 根据您的优先级(低延迟或低成本)为 k-NN 参数设置适当的默认值。有效值为 in_memoryon_disk。可选。默认值为 in_memory。有关更多信息,请参阅内存优化向量
compression_level 字符串 选择一个量化编码器,以给定因子减少向量内存消耗。有效值为 1x2x4x8x16x32x。可选。有关更多信息,请参阅内存优化向量
method 对象 用于在索引时组织向量数据并在搜索时搜索向量数据的算法。当 ANN 算法不需要训练时使用。可选。有关更多信息,请参阅方法和引擎
model_id 字符串 已训练模型的模型 ID。当 ANN 算法需要训练时使用。请参阅模型 ID。可选。

后续步骤


相关文章

剩余 350 字符

有问题?

想贡献力量?