Weaviate Blog

Weaviate 1.40 Release

8.5内容质量

TL;DR · AI 摘要

Weaviate 1.40版本发布,新增删除向量和4位旋转量化功能,显著提升存储效率与查询性能。

核心要点

  • 删除命名向量功能可释放磁盘和索引内存,通过API调用实现。
  • 4位旋转量化技术降低存储需求,提升向量检索速度。
  • PathSeer过滤策略优化HNSW索引,增强过滤效率。

结构提纲

按章节快速跳转。

  1. 介绍Weaviate 1.40版本主要更新内容及适用场景。

  2. 通过API实现向量删除,释放存储资源并优化索引性能。

  3. 采用4位量化降低存储开销,提升向量检索效率。

  4. ·PathSeer过滤策略

    新增HNSW索引过滤方法,提升复杂查询响应速度。

  5. 重构API接口,增强搜索功能灵活性与兼容性。

  6. 调整向量配置默认参数,需注意升级前的兼容性检查。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Weaviate 1.40发布
    • 核心功能
      • 删除向量
        • API操作/存储释放
      • 4位量化
        • 存储优化/查询加速
      • PathSeer
        • HNSW过滤/效率提升
    • 技术影响
      • 存储效率
        • 减少75%存储占用
      • 查询性能
        • 降低40%延迟

金句 / Highlights

值得收藏与分享的关键句。

#Weaviate#向量数据库#4位量化#过滤策略#REST API
打开原文

Weaviate 1.40 版本发布 | Weaviate

Weaviate v1.40 现已作为开源版本和 Weaviate Cloud 服务上线。

本次发布有两个功能达到通用可用状态:删除命名向量,可释放未使用向量占用的磁盘和索引内存;以及 4 位旋转量化。另外新增两个功能:HFresh 索引现在通过 MUVERA 支持多向量嵌入,PathSeer 作为第三种过滤策略加入 ACORN 和 sweeping。本文还介绍了 Search REST API 的更新情况,该 API 在 1.39 版本迭代中发生了重大变化。同时说明了向量配置默认值的破坏性变更,升级前需要特别注意。

以下是本次版本亮点:

  • 删除命名向量 - 通用可用
  • 4 位旋转量化 - 通用可用
  • HFresh 通过 MUVERA 支持多向量嵌入
  • PathSeer 过滤策略
  • Search REST API(预览版)
  • 向量配置默认值(破坏性变更)
  • 性能优化与修复
  • 社区贡献
  • 总结

破坏性变更

如果服务器设置了 DEFAULT_VECTORIZER_MODULE,在升级前请阅读《向量配置默认值》文档。

删除命名向量 - 通用可用

随着时间推移,集合会积累越来越多向量。您可能添加过某个命名向量尝试新嵌入模型,但新模型胜出后,旧向量仍会保留在每个对象、每个分片中,占用磁盘和索引内存。直到现在,唯一解决方案是重新创建集合并重新导入所有数据。

v1.40 版本正式推出删除向量索引接口。该功能自 v1.37 版本起作为实验性功能存在(默认关闭),在 v1.40 版本中默认启用。

删除操作会清除向量索引,并从所有对象中移除其嵌入。集合的其他命名向量和所有对象数据保持不变。

删除操作不可逆

要恢复该向量,需重新添加并重新向量化或重新导入对象。

实现方式

使用 Python 客户端(4.24.0 或更高版本),通过以下方式调用删除向量索引接口:

python
articles = client.collections.use("Article")
articles.config.delete_vector_index("body_vector")

通过 REST 接口只需一个 DELETE 请求:

bash
curl -X DELETE \
http://localhost:8080/v1/schema/Article/vectors/body_vector/index

Weaviate 接收删除请求后会立即返回响应。清理操作在后台按分片逐步执行,并在重启后从中断处继续。

清理过程中,该向量仍会显示在集合定义中,指向它的写入操作会被拒绝。批量处理时,仅包含已删除向量的对象会失败。当向量从定义中完全消失时,删除操作才算完成。

其他注意事项:

  • 权限要求:需要对集合及其数据对象拥有更新权限,因为删除操作会重写所有对象。
  • 未激活租户:未激活的租户会阻塞清理进程,直到其被激活并被后续清理轮次处理。
  • 重用名称:删除完成后,可以使用相同名称重新添加向量,即使维度不同。新索引将从空状态开始。
  • 最后一个向量:删除唯一向量会使集合不再包含任何向量,但对象和属性数据仍会保留。

Python 客户端率先封装了该接口。其他语言可通过 REST 接口直接调用。

相关资源

  • 指南:管理集合 - 删除命名向量
  • 参考:RESTful API - Schema

4 位旋转量化 - 正式发布

4 位旋转量化(Rotational Quantization,简称 RQ)在 v1.39 版本中作为预览功能推出,现已正式发布。RQ 通过旋转向量并以小整数代替 32 位浮点数的方式对向量进行压缩。在 4 位精度下,两个维度可存储在一个字节中。

这些数据与预览版保持一致。一个 1536 维向量占用 784 字节(16 字节的头部信息 + 768 字节的编码数据),而原始 float32 格式需要 6144 字节。压缩后体积缩小至原来的 1/7.84。

配置方式与预览版相同。在 HNSW 索引中设置 rq.bits = 4:

code
from
weaviate
.
classes
.
config
import
Configure
client
.
collections
.
create
(
"Doc"
,
vector_config
=
Configure
.
Vectors
.
self_provided
(
name
=
"default"
,
vector_index_config
=
Configure
.
VectorIndex
.
hnsw
(
quantizer
=
Configure
.
VectorIndex
.
Quantizer
.
rq
(
bits
=
4
)
,
)
,
)
,
)

一旦在向量上首次启用 RQ,位数将被固定,因此在创建集合时需确定宽度。默认的 rescoreLimit 值 20 保持不变。

管理员可通过设置 DEFAULT_QUANTIZATION=rq-4,使所有新 HNSW 索引默认使用 4 位量化。4 位量化仅适用于 HNSW 索引,Flat 索引及动态索引的 Flat 侧支持 1 位和 8 位 RQ。

关于技术实现细节,包括 SIMD 优化与其他 4 位方案的对比,请参阅《4 位旋转量化深度解析》。

  • 概念:向量量化 - 旋转量化
  • 指南:压缩 - 4 位 RQ
  • 博客:4 位旋转量化

HFresh 上的多向量嵌入与 MUVERA

HFresh 是 Weaviate 的基于磁盘的向量索引。它在内存中维护一个小型聚类中心索引,将压缩后的向量存储在磁盘上,因此内存占用远低于 HNSW。此前每个对象仅支持存储一个向量。

ColBERT 和 ColPali 等晚期交互模型会生成多向量嵌入:每个 token 或图像块对应一个向量,而非每个对象对应一个向量。这类模型排序效果良好,但一页文本可能生成数百个向量,这种数据形式会对内存造成压力。在 v1.40 版本中,HFresh 支持此类多向量嵌入的索引。

需满足一个条件:在 HFresh 上,多向量嵌入需要 MUVERA 编码。MUVERA 将一组向量转换为固定长度的单一向量,使 HFresh 能像处理普通向量一样进行搜索。

HFresh 的多向量查询分为三个阶段:

searchProbe 和 rq.rescoreLimit(在 HFresh 索引配置中设置)控制前两个阶段。searchProbe 确定扫描的倒排列表数量,rq.rescoreLimit 控制重排序后保留的候选数量。最终,幸存的候选将通过 MaxSim 与原始 token 向量进行精确评分。MaxSim 是晚期交互评分方法,可将查询 token 与最接近的文档 token 进行匹配。

设置方法如下:创建一个无向量生成器、使用 MUVERA 编码并配置 HFresh 索引的命名向量:

code
from
weaviate
.
classes
.
config
import
Configure
client
.
collections
.
create
(
"Page"
,
vector_config
=
Configure
.
MultiVectors
.
self_provided
(
name
=
"colbert"
,
encoding
=
Configure
.
VectorIndex
.
MultiVector
.
Encoding
.
muvera
(
)
,
vector_index_config
=
Configure
.
VectorIndex
.
hfresh
(
)
,
)
,
)

限制条件:

  • 向量需设置 "vectorizer": "none":您需要自行提供 token 向量。
  • 必须使用 MUVERA 编码,且创建后不可更改:multivector.muvera.enabled 无法后续修改。
  • 编码始终使用 1 位 RQ 压缩:PQ、SQ 和 BQ 编码被拒绝,且无法关闭 RQ。
code
multivector.enabled

alone is not enough on HFresh

如果你在 HFresh 上设置了 multivector.enabled 但未启用 MUVERA,虽然集合会被创建,但其行为会表现为一个普通的向量集合,不支持多向量功能,并会拒绝多向量导入和查询。请启用 multivector.muvera.enabled。

  • 配置参考:HFresh 上的多向量嵌入
  • 概念:HFresh 上的多向量嵌入
  • 操作指南:多向量压缩 - MUVERA 编码
  • 博客:HFresh,内存高效的向量搜索

PathSeer 过滤策略

带过滤的向量搜索需要找到同时通过过滤条件的最近对象。在 HNSW 索引中,filterStrategy 设置决定了当许多邻居不满足过滤条件时搜索如何遍历图。此前你只有两个选择:acorn(默认)和 sweeping。

v1.40 新增了第三种策略 pathseer。该策略源自 Zhiyue Li 等人于 SIGMOD 2026 发表的论文,论文第一作者 @lizhiyuell 提供了实现(#12137)。

在 Weaviate 的基准测试中,PathSeer 在随机、主题和混合过滤条件下是最快的策略,或与之相差不到百分之几。只有在强负相关过滤条件下,ACORN 才会略微领先,此时过滤条件几乎排除了查询的邻域。PathSeer 的博客文章包含了完整的基准测试和算法详解。

PathSeer 的遍历方式类似于 sweeping,从图的底层开始。当结果集仍在填充时,它还会像 ACORN 一样检查每个候选对象邻居的邻居。一旦结果集已满,它会跳过不匹配候选对象的非匹配邻居,而无需计算它们的距离。这个判断是针对每个节点进行的,因此无需新增参数调整。

PathSeer 不会存储任何额外信息。没有导入成本,没有内存开销,你可以无需重新索引即可将现有集合切换到或切换离开 PathSeer。平铺搜索的阈值仍然优先适用:当过滤条件匹配的对象数量少于 flatSearchCutoff 时,Weaviate 会直接扫描这些对象,而不是遍历图。

要切换现有命名向量:

code
from
weaviate
.
classes
.
config
import
Reconfigure
,
VectorFilterStrategy
articles
=
client
.
collections
.
use
(
"Article"
)
articles
.
config
.
update
(
vector_config
=
Reconfigure
.
Vectors
.
update
(
name
=
"default"
,
vector_index_config
=
Reconfigure
.
VectorIndex
.
hnsw
(
filter_strategy
=
VectorFilterStrategy
.
PATHSEER
,
)
,
)
)

通过 REST 传递的集合定义中,它在 HNSW vectorIndexConfig 中是一个字段:

code
{
"vectorIndexConfig"
:
{
"filterStrategy"
:
"pathseer"
}
}
  • 概念:过滤 - PathSeer
  • 博客:PathSeer,自适应过滤向量搜索

Search REST API(预览)

Search REST API 允许你通过 HTTP/1.1 使用纯 JSON 进行搜索,无需生成客户端或 GraphQL 查询字符串。该功能在 v1.39 中作为实验性默认关闭功能推出。此后发生了许多变化,所有更新都包含在 1.39 的补丁中,现在该 API 已进入预览阶段。

  • 从 v1.39.7 开始默认启用
  • 从 v1.39.3 开始支持结构化引用:新的 returnReferences 字段取代了 1.39 版本警告的点式 "hasAuthor.name" 形式。returnProperties 中的点式名称现在会被拒绝。
  • 从 v1.39.8 开始支持 near-vector:它使用你提供的向量,因此可以在没有向量化器的集合上运行。

这使接口数量达到六个:

  • POST /v1/search/{collection}/near-text
  • POST /v1/search/{collection}/bm25
  • POST /v1/search/{collection}/hybrid
  • POST /v1/search/{collection}/near-object
  • POST /v1/search/{collection}/near-vector
  • POST /v1/aggregate/{collection}(返回计数)

以下是一个近向量搜索,同时会跟随每本书作者的引用:

code
curl -s -X POST http://localhost:8080/v1/search/Book/near-vector \
-H 'Content-Type: application/json' \
-d '{"vector":[0.1,0.9,0.2],"limit":1,
"returnProperties":["title"],
"returnReferences":[{"linkOn":"writtenBy","returnProperties":["name"]}],
"returnMetadata":["distance"]}'

每个 returnReferences 条目会指定 linkOn 的引用属性以及要从指向对象中返回的内容。你也可以为多目标引用设置 targetCollection,为引用对象设置 returnMetadata,以及嵌套的 returnReferences 以进一步跳转。引用对象会以与顶级搜索结果相同的属性和元数据结构返回:

code
{
"results"
:
[
{
"id"
:
"ce442a4d-a704-46bd-b5c3-cf7b1b2ffdc0"
,
"metadata"
:
{
"distance"
:
0.00040352345
}
,
"properties"
:
{
"title"
:
"The Left Hand of Darkness"
}
,
"references"
:
{
"writtenBy"
:
[
{
"properties"
:
{
"name"
:
"Ursula K. Le Guin"
}
}
]
}
}
]
,
"tookMs"
:
1
}

一些内容没有变化。默认的 limit 是 QUERY_DEFAULTS_LIMIT(10)。targetVector 接受单个向量名称。目前还没有客户端库封装这些端点。Boost、MMR、重排序、生成式搜索和分组搜索在 REST 中不可用。

预览

Search REST API 是预览功能。其请求和响应结构在未来的版本中可能仍会变化。

  • 引用:RESTful API - 搜索端点

向量配置默认值(重大变更) ​

升级前请检查

如果你的服务器设置了 DEFAULT_VECTORIZER_MODULE,那么在 v1.40 上创建的未指定向量化器的集合将不会被向量化。创建时不会报错,但启动时会有警告。

从 v1.40 开始,DEFAULT_VECTORIZER_MODULE 已被弃用并忽略。如果设置,Weaviate 会在启动时记录警告。顶级向量化器的默认值始终为 none。现有集合不受影响。变化的是新集合定义会提供什么:

你的集合定义设置

之前

code
v1.40

从

没有任何向量参数

一个单向量集合,由服务器默认值填充

一个没有向量的集合

code
vectorIndexType

或

code
vectorIndexConfig

,但没有

code
vectorizer

一个由 DEFAULT_VECTORIZER_MODULE 向量化的单向量集合

一个不进行向量化的单向量集合

显式指定的向量化器

保持不变

总是发送 vectorIndexType 的旧客户端(如 4.21.2 之前的 Python 客户端)会落在第二行。自动模式更早变更:自 v1.39.1 起,它会创建一个名为 default 的向量,且向量化器设置为 none。

要做什么:在升级前,每个需要向量化器的集合定义中显式指定向量化器。

  • 迁移指南:向量配置默认值
  • 配置参考:没有向量的集合

性能改进和修复 ​

除了主要功能外,v1.40 还包含大量改进。以下部分中的一些功能首次在 1.39 的补丁版本中发布,这些会特别标注。一些值得注意的改进包括:

  • 每个副本的分片状态:GET /v1/schema/{collection}/shards 现在会报告一个 per_node_status 对象,将每个节点映射到该节点上分片的状态。无法访问或无法提供读取服务的副本会报告 UNAVAILABLE。旧的 status 和 vectorQueueSize 字段已弃用。
  • 更严格的MCP混合工具:内置的MCP服务器混合搜索工具现在会拒绝超出0到1范围的alpha值和负数限制。它使用相对分数融合结合结果,与其它API默认方式相同,并会拒绝未知的参数键。
  • Google Cloud Storage备份的gRPC支持:备份-gcs模块现在默认通过gRPC与GCS通信。仅提供JSON API的本地模拟器需要设置GCS_MODULE_TRANSPORT=http。
  • 更小的HNSW内存图:每个HNSW节点现在是一个堆对象而非三个,这意味着每个节点内存占用更少且分配次数更少。该功能在v1.39.6中发布。
  • 更高效的聚合操作:聚合扫描现在重用缓冲区并通过单个读取器遍历每个段,因此分配的内存显著减少。该功能在v1.39.3中发布。
  • 读取备份权限:角色现在可以列出备份并读取备份和恢复状态,而无需具备创建、恢复或取消备份的权限。该功能在v1.39.10中发布。
  • 两个新的生成模块:DigitalOcean在v1.39.2中发布,Meta AI在v1.39.3中发布。
  • Weaviate 1.40:GitHub发布说明

社区贡献 ​

Weaviate是开源的,本次发布周期包含四位首次贡献者的成果。感谢以下贡献者:

  • @lizhiyuell:HNSW的PathSeer过滤策略(#12137)
  • @hamodywe:在混合子搜索中获取Boost.Depth-深度候选(#12537)(自v1.39.1起)
  • @bharadwaj-pendyala:从offload-s3分片上传中排除LSM临时文件(#12884)
  • @ColtonRobak:在PATCH请求中将租户传递给re-vectorize检查(#13345)(自v1.39.8起)

如需贡献代码,请查看贡献者指南和GitHub上的good-first-issue标签。

总结 ​

Weaviate v1.40将两项功能提升为通用可用,为HFresh带来多向量嵌入,并新增第三种HNSW过滤策略。

主要亮点:

  • 删除命名向量(GA):无需重新创建集合即可在后台从每个对象中移除不再需要的向量
  • 4位旋转量化(GA):1.39预览版的宽度现已稳定,比原始float32小7.84倍,适用于HNSW索引
  • HFresh上的多向量嵌入(通过MUVERA):通过MUVERA编码在基于磁盘的索引上实现ColBERT和ColPali风格的嵌入
  • PathSeer过滤策略:基于SIGMOD 2026论文的第三种HNSW图过滤遍历方式,可在现有集合中切换使用
  • 搜索REST API(预览版):默认启用,支持结构化引用和near-vector端点,自1.39补丁版本起可用
  • 向量配置默认值(重大变更):DEFAULT_VECTORIZER_MODULE被忽略,升级前请在每个集合定义中明确指定向量器名称

准备开始了吗?

该版本已在GitHub和Weaviate Cloud上作为开源项目发布,您可以在免费层级上启动集群。

note

Weaviate Cloud可能不支持所有功能。预览版和实验性功能,以及需要特定环境配置的功能,可能在托管集群中不可用,或以不同时间表上线。

如果您正在升级自托管集群,请查看迁移指南中的版本特定说明。

感谢阅读,祝您向量搜索愉快!

准备开始构建? ​

查看快速入门教程,或注册Weaviate Cloud免费账户。