创建索引

最近更新时间:2026-03-02 16:22:42

我的收藏
本文介绍向量索引创建的基本要点,您可以参阅 elastic 文档了解更多详情。
向量索引是构建语义搜索、推荐系统和 RAG(检索增强生成)应用的基础,正确的配置对搜索性能和质量至关重要。本文将基于如下示例详细介绍如何在 ES 中创建向量索引,深入解析每个配置参数的含义和作用。

索引 Mapping 详解

如下是一个向量索引的创建示例:
PUT /book-index
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 1,
"refresh_interval": "1s"
}
},
"mappings": {
"properties": {
"id": {
"type": "keyword"
},
"category": {
"type": "keyword"
},
"price": {
"type": "integer"
},
"title_text": {
"type": "text"
},
"title_vector": {
"type": "dense_vector", // 稠密向量
"dims": 768, // 向量维度
"similarity": "cosine", // 向量相似度算法
"index_options":{
"type": "hnsw",
"m": 16, // HNSW 图中每个节点的最大连接数
"ef_construction": 100 // 构建HNSW时,为每个新节点考察的候选邻居数量,影响构建索引的质量和速度
}
},
"content_text": {
"type": "text"
},
"content_vector": {
"type": "dense_vector",
"dims": 768,
"similarity": "cosine",
"index_options":{
"type": "hnsw",
"m": 16, // HNSW 图中每个节点的最大连接数
"ef_construction": 100 // 构建HNSW时,为每个新节点考察的候选邻居数量,影响构建索引的质量和速度
}
}
}
}
}
如下是主要参数说明,可参见dense_vector了解更详细介绍信息。
向量字段的参数说明:
参数
是否必选
说明
type
dense_vector 表示稠密向量类型。
dims
向量维度数,最大4096,必须与写入的向量维度严格一致。
越高则包含的信息越丰富,检索精度越高,但存储和计算成本也越高。您可以先从 384维、768维开始测试召回率/准确率,不达标则升维,达标可尝试降维。
similarity
相似度计算方式,决定向量距离度量标准。
index_options(可选):
参数
是否必选
说明
type
指定索引算法,不同ES版本的默认值不同,8.13为 hnsw,8.16为 int8_hnsw,9.1.3为 bbq_hnsw。
您可以根据向量规模参考以下信息设置:
. hnsw:建议向量数量在1亿以内采用
. int8_hnsw:建议向量数量在1亿-20亿采用
. bbq_hnsw:建议向量数量在十亿到百亿采用
. bbq_disk:建议向量数量在十亿到千亿采用(diskbbq在 ES 9.2以上支持,云上版本预计Q1上线)
m
HNSW 图中每个节点的最大连接数,默认值16。
较大的 m 会提高召回率和查询速度,但会增加索引时间和内存占用。大多数场景从 ​16​ 开始,如果对召回率要求极高,且可以接受更长索引时间和更大索引体积,可尝试增加到32或更高。
ef_construction
是HNSW 索引构建时,为每个新节点寻找连接时考察的候选邻居数量,默认值100。
增大此值会提升索引质量和召回率,但会延长索引构建时间。可以从 100 开始,如果数据分布复杂或对精度要求很高可以设置200或更高。
相似度计算 similarity 支持4种算法如下:
算法
描述
l2_norm,欧氏距离(L2距离)
计算空间绝对距离,数值越小越相似
cosine,余弦相似度
关注向量方向,适合语义检索
dot_product,向量点积
兼顾方向和大小,向量须先归一化为单位向量(长度为 1)
max_inner_product,最大内积
适用于未归一化且长度有意义的向量
说明:
图片检索推荐用cosine或者l2_norm,文本语义检索推荐用cosine,详情请参考kNN search in Elasticsearch