回顾:向量搜索创新的时间轴
回顾在Elasticsearch从最早版本到最新8.15.0版本中,关于速度、规模和相关性的所有变化,真是令人惊叹,我们已经走了多远。
这篇文章汇集了所有为使Elasticsearch和Lucene成为最佳向量数据库所付出的努力和时间线。如果你想了解更多关于Lucene向量搜索性能的重大进展及其他Lucene改进,可以查阅Lucene向量数据库的进步和Lucene改进。
Elasticsearch 7.x
我们的故事始于Elasticsearch 7,当时一些有远见的工程师认为向量搜索很重要,并主张我们应该支持它。
版本7中的一些变化包括引入了高维向量的字段类型、向量相似性函数以及用于密集向量的向量脚本函数,以用于暴力搜索。
这只是个开始...
Elasticsearch 8.0
Elasticsearch 8.0引入了原生支持ANN搜索。
此外,Elasticsearch还引入了对浮点向量的HNSW kNN搜索的实验性支持。
Elasticsearch 8.2
在Elasticsearch 8.2中,我们为kNN搜索添加了过滤支持。
Elasticsearch 8.2附带了Lucene 9.1,其中包括带有过滤器的kNN搜索,通过减少I/O来提高向量合并速度,并通过展开和自动向量化加快l2_norm
计算。
Elasticsearch 8.3
Elasticsearch 8.3附带了Lucene 9.2,通过执行邻居的多样性检查和修正基础层连接数来提高HNSW图的性能。
Elasticsearch 8.4
在Elasticsearch 8.4中,kNN搜索正式可用,并添加到_search
端点。这解锁了混合搜索与过滤、重排序以及结合语义搜索和词法搜索的功能。
Elasticsearch 8.5
在Elasticsearch 8.5中,我们为dense_vector
字段添加了支持合成源的功能。
Elasticsearch 8.5附带了Lucene 9.4,增加了对字节编码向量的支持,并通过在索引期间构建hnsw图来优化性能,以提高刷新时间。
Elasticsearch 8.6
Elasticsearch 8.6增加了对字节向量的支持,使用户可以在Elasticsearch外部量化向量。
Elasticsearch 8.7
Elasticsearch 8.7增加了同时搜索多个kNN字段的能力。
Elasticsearch 8.7还附带了Lucene 9.5,提高了HNSW图存储效率。
Elasticsearch 8.8
Elasticsearch 8.8是一个重大版本。我们不仅将dense_vector
查询的维度支持增加到2048,还推出了稀疏向量查询的text_expansion
查询和最先进的ELSER V1模型。
Elasticsearch 8.8附带了Lucene 9.6,通过重用最大的图来提高HNSW合并性能。
Elasticsearch 8.9
8.9是另一个重大版本,引入了SIMD支持和Panama Vector API。
此外,query_vector_builder
正式可用,并引入了RRF。
Elasticsearch 8.9还附带了Lucene 9.7,添加了多段并行kNN查询,加快了浮点向量的暴力搜索,并通过Panama Vector API加速了向量的暴力搜索。
Elasticsearch 8.10
在Elasticsearch 8.10中,引入了多段搜索并行性。
Elasticsearch 8.11
在Elasticsearch 8.11中,我们利用Lucene中的段落向量搜索支持,通过嵌套字段支持Elasticsearch中的段落向量。此外,我们将向量维度的最大数增加到4096,并增加了最大内积支持。我们重新引入了sparse_vector
字段映射,发布了改进并正式可用的ELSER V2模型,并开始默认索引密集向量(使用动态映射)。
Elasticsearch 8.11还利用了Lucene 9.8,增加了MIP支持。
Elasticsearch 8.12
在8.12版本中,我们推出了kNN查询,解锁了查询DSL中的大量功能。此外,我们添加了int8_hnsw
索引类型以支持自动量化向量,通过归一化向量来提高余弦相似性性能,启用单个分片内的查询阶段并行性,并为HNSW中的浮点向量添加了字节量化。
Elasticsearch 8.12还利用了Lucene 9.9,增加了多线程图构建和int8标量量化格式。
Elasticsearch 8.13
在Elasticsearch 8.13中,我们增加了int8_flat
用于自动量化向量的平面存储,启用了段落向量搜索的多个内嵌命中,并通过使k
和num_candidates
可选来进一步简化了knn
查询。此外,我们推出了令牌修剪,以加速稀疏向量查询如ELSER模型。
Elasticsearch 8.13附带了Lucene 9.10,包含了多段HNSW图搜索改进。
Elasticsearch 8.14
Elasticsearch 8.14包括NEON SIMD优化的int8_hnsw
索引操作,支持字节向量的十六进制编码字节串,默认密集向量字段使用int8_hnsw
,并进一步增强了kNN查询构建器,添加了modelId
和modelText
。
Elasticsearch 8.15
我们来到了Elasticsearch 8.15 - 这是一个重大版本,包含:
- Elasticsearch 8.15现在原生支持SIMD优化的
int8_hnsw
索引和搜索 - 添加了int4标量量化,使用
int4_hnsw
和int4_flat
向量 - 添加了对位向量的支持,包括hnsw和平面向量,并添加了暴力搜索的汉明距离
- 引入了新的
sparse_vector
查询,以使用推理端点或预计算查询向量搜索稀疏向量 - 添加了新的语义文本字段和语义查询,使得开始使用语义搜索变得前所未有的简单!
Elasticsearch 8.15还附带了Lucene 9.11,包含大量优化:
- 通过Lucene madvise优化提高速度
- 添加了新的
VectorScorer
接口,以改进暴力评分 - 包括优化的标量分位数,以允许动态分位数计算
- 添加了int4标量量化和优化的SIMD代码以进行int4比较
... 以及未来!
我们还远未完成,所以一定要查看8.15和无服务器版中的所有新功能,并关注Search Labs以了解我们的所有新功能!