Elasticsearch Service 创建索引(向量搜索指南)

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

相关产品
Elasticsearch Service 产品页,含版本规格、价格与购买入口。

一、索引 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。

赞 (0)
上一篇 4天前
下一篇 4天前