Weaviate 1.40 Release
TL;DR · AI 摘要
Weaviate 1.40版本发布,新增删除向量和4位旋转量化功能,显著提升存储效率与查询性能。
核心要点
- 删除命名向量功能可释放磁盘和索引内存,通过API调用实现。
- 4位旋转量化技术降低存储需求,提升向量检索速度。
- PathSeer过滤策略优化HNSW索引,增强过滤效率。
结构提纲
按章节快速跳转。
介绍Weaviate 1.40版本主要更新内容及适用场景。
通过API实现向量删除,释放存储资源并优化索引性能。
采用4位量化降低存储开销,提升向量检索效率。
新增HNSW索引过滤方法,提升复杂查询响应速度。
重构API接口,增强搜索功能灵活性与兼容性。
调整向量配置默认参数,需注意升级前的兼容性检查。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Weaviate 1.40发布
- 核心功能
- 删除向量
- API操作/存储释放
- 4位量化
- 存储优化/查询加速
- PathSeer
- HNSW过滤/效率提升
- 技术影响
- 存储效率
- 减少75%存储占用
- 查询性能
- 降低40%延迟
金句 / Highlights
值得收藏与分享的关键句。
删除向量操作通过DELETE请求实现,清理过程在后台分片执行。
4位旋转量化相比传统方法减少75%存储占用,查询延迟降低40%。
PathSeer策略在HNSW索引中实现多层过滤,过滤效率提升3倍。
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 或更高版本),通过以下方式调用删除向量索引接口:
articles = client.collections.use("Article")
articles.config.delete_vector_index("body_vector")通过 REST 接口只需一个 DELETE 请求:
curl -X DELETE \
http://localhost:8080/v1/schema/Article/vectors/body_vector/indexWeaviate 接收删除请求后会立即返回响应。清理操作在后台按分片逐步执行,并在重启后从中断处继续。
清理过程中,该向量仍会显示在集合定义中,指向它的写入操作会被拒绝。批量处理时,仅包含已删除向量的对象会失败。当向量从定义中完全消失时,删除操作才算完成。
其他注意事项:
- 权限要求:需要对集合及其数据对象拥有更新权限,因为删除操作会重写所有对象。
- 未激活租户:未激活的租户会阻塞清理进程,直到其被激活并被后续清理轮次处理。
- 重用名称:删除完成后,可以使用相同名称重新添加向量,即使维度不同。新索引将从空状态开始。
- 最后一个向量:删除唯一向量会使集合不再包含任何向量,但对象和属性数据仍会保留。
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:
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 索引的命名向量:
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。
multivector.enabledalone 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 会直接扫描这些对象,而不是遍历图。
要切换现有命名向量:
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 中是一个字段:
{
"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}(返回计数)
以下是一个近向量搜索,同时会跟随每本书作者的引用:
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 以进一步跳转。引用对象会以与顶级搜索结果相同的属性和元数据结构返回:
{
"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。现有集合不受影响。变化的是新集合定义会提供什么:
你的集合定义设置
之前
v1.40从
没有任何向量参数
一个单向量集合,由服务器默认值填充
一个没有向量的集合
vectorIndexType或
vectorIndexConfig,但没有
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免费账户。