Elasticsearch向量搜索进化史:从7.x到8.15的关键创新

2024-09-11 07:38:57 浏览数 (3)

回顾:向量搜索创新的时间轴

回顾在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用于自动量化向量的平面存储,启用了段落向量搜索的多个内嵌命中,并通过使knum_candidates可选来进一步简化了knn查询。此外,我们推出了令牌修剪,以加速稀疏向量查询如ELSER模型。

Elasticsearch 8.13附带了Lucene 9.10,包含了多段HNSW图搜索改进。

Elasticsearch 8.14

Elasticsearch 8.14包括NEON SIMD优化的int8_hnsw索引操作,支持字节向量的十六进制编码字节串,默认密集向量字段使用int8_hnsw,并进一步增强了kNN查询构建器,添加了modelIdmodelText

Elasticsearch 8.15

我们来到了Elasticsearch 8.15 - 这是一个重大版本,包含:

  • Elasticsearch 8.15现在原生支持SIMD优化的int8_hnsw索引和搜索
  • 添加了int4标量量化,使用int4_hnswint4_flat向量
  • 添加了对位向量的支持,包括hnsw和平面向量,并添加了暴力搜索的汉明距离
  • 引入了新的sparse_vector查询,以使用推理端点或预计算查询向量搜索稀疏向量
  • 添加了新的语义文本字段和语义查询,使得开始使用语义搜索变得前所未有的简单!

Elasticsearch 8.15还附带了Lucene 9.11,包含大量优化:

  • 通过Lucene madvise优化提高速度
  • 添加了新的VectorScorer接口,以改进暴力评分
  • 包括优化的标量分位数,以允许动态分位数计算
  • 添加了int4标量量化和优化的SIMD代码以进行int4比较

... 以及未来!

我们还远未完成,所以一定要查看8.15和无服务器版中的所有新功能,并关注Search Labs以了解我们的所有新功能!

0 人点赞