全部产品
Search
文档中心

检索分析服务Elasticsearch版:阿里云Elasticsearch向量引擎使用指南

更新时间:Feb 12, 2026

阿里云Elasticsearch向量引擎功能,用于处理大规模的向量数据。它结合了Elasticsearch的强大搜索功能和向量相似度计算能力,适用于推荐系统、图像检索、自然语言处理等场景。本文将介绍如何高效地使用阿里云Elasticsearch向量引擎,并为您提供一些最佳实践建议。阿里云Elasticsearch的向量引擎正在不断迭代,因此建议使用最新版本的阿里云Elasticsearch,以确保在性能、成本和用户体验方面获得最佳效果。

前提条件

已创建ES实例,如您未创建实例,请参见初级版:从实例创建到数据检索(创建阿里云ES 8.x的最新版本)。

说明

向量引擎需要大量堆外内存cache向量索引。在选择规格时,可依据下文关于内存计算的说明,评估堆外内存的使用情况,从而选择合适的数据节点规格及其数量。

操作指引

1.创建索引

创建一个适合存储向量数据的索引是首要步骤。以下是一个示例索引定义:

PUT /my_vector_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "dense_vector",
        "dims": 3
      },
      "my_text" : {
        "type" : "keyword"
      }
    }
  }
}
重要
  • number_of_shardsnumber_of_replicas 的设置取决于您的数据规模和性能需求。

  • dense_vector 类型用于存储向量数据,dims 参数指定了向量的维度。

  • dense_vector的参数很多,具体请参见Dense vector field type

2.数据导入

您可以使用多种方式将数据导入到Elasticsearch向量索引中,例如使用Bulk API批量导入数据。以下是一个示例:

PUT my_vector_index/_doc/1
{
  "my_text" : "text1",
  "my_vector" : [0.5, 10, 6]
}

PUT my_vector_index/_doc/2
{
  "my_text" : "text2",
  "my_vector" : [-0.5, 10, 10]
}
重要

请确保向量数据的维度与索引定义中的维度一致。

3.向量搜索

使用Elasticsearch的向量相似度搜索功能,可以通过指定查询向量来查找最相似的文档。以下是一个示例查询:

GET my_vector_index/_search
{
  "knn": {
    "field": "my_vector",
    "query_vector": [-5, 9, -12],
    "k": 10,
    "num_candidates": 100
  },
  "fields": [ "my_text" ]
}

参数

内容

k

(可选)表示返回的最近邻居的数量。该值必须小于或等于 num_candidates。默认情况下,该值与 size 的大小相等。

num_candidates

(可选)每个分片需考虑的最近邻居候选数量。该参数对性能和召回率具有显著影响,num_candidates 越大,召回率越高,但性能影响也随之增大。该值应大于 k 或其大小(如果 k 被省略),且不得超过 10,000。Elasticsearch 从每个分片收集 num_candidates 个结果,并将其合并以查找前 k 个结果。增加 num_candidates 往往会提升最终 k 结果的准确性。默认值为 Math.min(1.5 * k, 10,000)。

说明

关于knum_candidates参数的说明:num_candidates在HNSW中指的是查询的ef值,它表示在分片中收集的最临近的num_candidates个文档,而k则是Elasticsearch最终在结果中返回的doc数量。

更多向量搜索的功能包括:

  • knn可以支持filter查询。可以支持similarity,设置最小score的命中doc。可以支持nested字段。

  • 支持同时查询多个knn字段。

  • 支持使用script进行精确knn查询。

  • 支持使用script进行rescore

  • 完整功能请参见k-nearest neighbor (knn) search