Elasticsearch93新增bfloat16向量支持

作者:互联网

2026-03-30

AI快讯

Elasticsearch 9.3引入的bfloat16向量存储技术,为开发者提供了更高效的向量数据处理方案。本文将详细解析这项创新功能的技术原理与实用价值。

Elasticsearch作为领先的搜索工具包,从向量搜索到REST APIs都展现出强大功能。通过探索Elasticsearch Labs中的示例notebooks,开发者可以快速掌握最新特性。现在即可开始免费试用,或在本地运行体验。

Elasticsearch 9.3针对向量数据进行了多项重要升级,其中bfloat16元素类型的引入尤为关键。这项改进能将向量存储需求减半,同时保持优秀的召回率和运行时性能。

在9.3版本之前,dense_vector字段仅支持单比特向量、1字节整数和4字节浮点数。索引过程中存储的原始向量会占用大量磁盘空间。以1024维向量为例,每个浮点值需4字节存储,总占用达4kB。

IEEE-754标准定义了多种浮点格式,包括Java使用的4字节float32和8字节float64。虽然存在2字节的float16格式,但其最大值受限且转换过程复杂。相比之下,bfloat16通过保留符号位和指数位,仅截断小数部分低2字节,既保持了取值范围,又简化了转换过程。

9.3版本新增的bfloat16支持将向量元素存储为2字节格式。虽然Java内存中仍处理为4字节float32,但写入磁盘时会智能转换为bfloat16。这种设计使向量索引大小直接减半,I/O需求大幅降低,且对搜索性能影响极小。

以下示例展示了使用bfloat16前后的存储大小对比:

对于原生bfloat16格式的输入向量,Elasticsearch支持直接存储,无需转换即可实现存储减半。若输入为4字节精度,系统会自动截断为2字节bfloat16。但需注意,这会损失部分精度,需要完整精度的场景应避免使用。

从9.3版本开始,所有新建索引的dense_vector类型都可指定bfloat16元素类型。现有索引如需升级,可通过重新索引实现自动转换。

bfloat16向量支持的引入,标志着Elasticsearch在高效存储领域迈出重要一步。这项技术突破为处理大规模向量数据提供了更优解决方案。

相关标签:

bfloat16 向量存储 element_type dense_vector float32 HNSW