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

2024年9月5日   |   by mebius

作者:Kathleen DeRusso, Benjamin Trent

%title插图%num

回顾 Elasticsearch 最新 8.15.0 版本中围绕速度、规模和相关性的所有变化,我们取得的进步令人惊叹。

这篇文章汇总并记录了 Elasticsearch 和 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 字段合成源(synthetic source)的支持。

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 是另一个性能提升巨大的版本,它通过 Panama Vector API 引入了 SIMD 支持
除此之外,query_vector_builtgcodeder 已正式发布,并引入了 RRF。

Elasticsearch 8.9 还附带 Lucene 9.7,它为 kNN 查询添加了多段并行性,通过调整浮点向量在磁盘上的编码方式加快了浮点向量的强力搜索速度,并利用 Panama Vector API 加快了向量的强力(brute force)搜索速度。

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 用于自动量化向量的平面存储,为段落向量搜索启用了多个内部命中(inner-hits),并通过将 k 和 num_candidates 设为可选项进一步简化了 knn 查询。此外,我们推出了 token 修剪功能,以加快稀疏向量查询稀疏模型(例如 ELSER)。

Elasticsearch 8.13 随 Lucene 9.10 一起提供,其中包括多段 HNSW 图形搜索改进。

Elasticsearch 8.14

Elasticsearch 8.14 包含针对 int8_hnsw 索引的 NEON SIMD 优化本机索引操作、对字节向量的十六进制编码字节字符串的支持、默认密集向量字段以使用 int8_hnsw,并通过添加 modelId 和 modelText 进一步增强了 kNN 查询构建器。

Elasticsearch 8.15

现在我们来到了 Elasticstgcodeearch 8.15 – 一个包含以下内容的重大版本:

  • Elasticsearch 8.15 现在是针对 int8_hnsw 索引的索引和搜索进行了 SIMD 原生优化
  • 使用 int4_hnsw 和 int4_flat 向量添加 int4 标量量化
  • 为 hnsw 和 flat 向量添加对位向量的支持,并为强力搜索添加汉明距离
  • 引入了新的 sparse_vector 查询,以使用推理端点或预先计算的查询向量搜索稀疏向量
  • 添加新的 semantic_text 字段和语义查询,使开始使用语义搜索变得比以往任何时候都更容易!

Elasticsearch 8.15 还附带 Lucene 9.11,它也有大量出色的优化:

  • 通过 Lucene madvise 优化提高速度
  • 添加新的 VectorScorer 界面,以便更好地进行强力(brute force)评分
  • 包括优化的标量分位数,以允许动态分位数计算
  • 添加 int4 标量量化和优化的 SIMD 代码以进行 int4 比较

… 甚至更多!

我们还远未完成,因此请务必查看tgcode 8.15 和 serverless 中的所有新功能,并关注搜索实验室以了解我们所有的新功能!

准备好自己尝试了吗?开始免费试用
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GenAI 应用程序!

原文:Vector search improvements in Elasticsearch and Lucene — Search Labs

文章来源于互联网:Elasticsearch 回顾:向量搜索创新的时间线

相关推荐: Elasticsearch:使用 semantic_text 简化语义搜索

作者:来自 ElasticCarlos Delgado, Mike Pellegrini semantic_text – 你知道,用于语义搜索! 你是否想开始使用语义搜索来搜索数据,但专注于模型和结果而不是技术细节?我们引入了 semantic_text 字段…

Tags: , ,