Link Search Menu Expand Document Documentation Menu

创建向量索引

在 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"
        }     
      }
    }
  }
}

创建向量索引涉及以下关键步骤:

  1. 启用 k-最近邻 (k-NN) 搜索:在索引设置中将index.knn设置为true,以启用 k-NN 搜索功能。

  2. 定义向量字段:指定将存储向量数据的字段。在 OpenSearch 中定义knn_vector字段时,您可以选择不同的数据类型来平衡存储要求和性能。默认情况下,k-NN 向量是浮点向量,但您也可以选择字节或二进制向量以实现更高效的存储。有关更多信息,请参阅k-NN 向量

  3. 指定维度:设置dimension属性以匹配所用向量的大小。

  4. (可选)选择空间类型:选择用于相似性比较的距离度量,例如l2(欧几里得距离)或cosinesimil。有关更多信息,请参阅空间

  5. (可选)选择工作负载模式和/或压缩级别:选择工作负载模式和/或压缩级别以优化向量存储。有关更多信息,请参阅优化向量存储

  6. (可选,高级)选择方法:配置用于优化向量搜索性能的索引方法,例如 HNSW 或 IVF。有关更多信息,请参阅方法和引擎

实现选项

根据您的向量生成方法,选择以下实现选项之一:

下表总结了支持用例的关键索引配置差异。

功能 向量字段类型 摄入管道 转换 用例
存储在 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 也支持稀疏向量。有关更多信息,请参阅神经稀疏搜索

后续步骤

剩余 350 字符

有问题?

想做贡献?