Weaviate v1.35 现在开源并可在 Weaviate Cloud 上使用。
此版本引入了强大的新的生命周期管理功能,即对象生存时间 (TTL),并改进了备份性能,支持 zstd 压缩。我们也很高兴地宣布 Flat Index RQ 量化正式发布,并且 Java v6 客户端正式发布!
此外,v1.35 带来了 使用 Weaviate Embeddings 实现的多模态嵌入,使构建文档检索应用程序比以往更容易,以及运行时可配置的 OIDC 证书,以增强安全性灵活性和数据库操作模式。
这些改进有助于使 Weaviate 更灵活、性能更高且更易于大规模运行。
以下是发布 ⭐️亮点⭐️!

- 对象生存时间 (TTL)
- Java v6 客户端 - 正式发布
- Flat Index RQ 量化 - 正式发布
- 增强的备份压缩
- Weaviate Embeddings - 多模态支持
- 运行时可配置的 OIDC 证书
- 数据库操作模式
- 多项性能改进和修复
- 社区贡献
对象生存时间 (TTL)
Weaviate v1.35 引入 对象生存时间 (TTL) 作为技术预览版,可以自动删除在指定时间段后创建的对象。此强大的生命周期管理功能有助于您维护干净的数据存储,遵守保留策略并降低存储成本。
TTL 可以在集合级别以三种方式配置
相对于创建时间
将对象设置为在创建后固定持续时间后过期
import datetime
from weaviate.classes.config import Configure, Property, DataType
client.collections.create(
name="SessionLogs",
properties=[
Property(name="data", data_type=DataType.TEXT),
],
object_ttl_config=Configure.ObjectTTL.delete_by_creation_time(
time_to_live=datetime.timedelta(hours=24), # Expire after 24 hours
filter_expired_objects=True, # Exclude expired objects from queries
),
)
相对于上次更新时间
将对象设置为基于上次修改时间过期
client.collections.create(
name="CacheData",
properties=[
Property(name="data", data_type=DataType.TEXT),
],
object_ttl_config=Configure.ObjectTTL.delete_by_update_time(
time_to_live=datetime.timedelta(days=7), # Expire 7 days after last update
filter_expired_objects=True,
),
)
相对于 DATE 属性
将对象设置为相对于数据中的特定日期字段过期
client.collections.create(
name="Events",
properties=[
Property(name="event_date", data_type=DataType.DATE),
Property(name="title", data_type=DataType.TEXT),
],
object_ttl_config=Configure.ObjectTTL.delete_by_date_property(
property_name="event_date",
ttl_offset=datetime.timedelta(days=30) # Expire 30 days after event_date
),
)
主要功能
- 灵活的过期策略 - 选择适合您用例的方法
- 可选的查询过滤 - 在删除运行之前从结果中排除已过期的对象
- 可配置的删除计划 - 控制何时发生后台清理
- 多租户感知 - 尊重租户活动状态
对象 TTL 当前是自托管 Weaviate 实例的技术预览功能。它尚未在 Weaviate Cloud 实例中可用。
- 会话管理 - 自动删除过期的用户会话
- 缓存失效 - 自动删除陈旧的缓存数据
- 合规性 - 强制执行数据保留策略
- 事件存档 - 在保留期后删除旧事件数据
Java v6 客户端 - 正式发布
我们很高兴地宣布 Java v6 客户端现在正式发布!这是 Java 客户端的全新重写,提供了一种现代、惯用的 API,使 Java 开发人员与 Weaviate 合作更加直观和愉快。
Java v6 中的新功能
Java v6 客户端带来了
- 流畅、构建器风格的 API - 更易读和可维护的代码
- 完全的 gRPC 支持 - 更高效的数据操作
- 更好的类型安全 - 在编译时捕获错误
- 改进的集合管理 - 更轻松的配置和操作
- 增强的查询构建器 - 更直观的搜索操作
- 更好的错误处理 - 清晰、可操作的错误消息
示例用法
以下是如何开始使用 Java v6
WeaviateClient client = WeaviateClient.connectToWeaviateCloud(
weaviateUrl,
weaviateApiKey
);
// Create a collection with vector configuration
client.collections.create(
"Movie",
col -> col
.vectorConfig(VectorConfig.text2VecWeaviate())
.properties(
Property.text("title"),
Property.text("description"),
Property.text("genre")
)
);
// Insert data
List<Map<String, Object>> dataObjects = List.of(
Map.of(
"title", "The Matrix",
"description", "A computer hacker learns about the true nature of reality.",
"genre", "Science Fiction"
),
Map.of(
"title", "Spirited Away",
"description", "A young girl becomes trapped in a mysterious world of spirits.",
"genre", "Animation"
)
);
CollectionHandle<Map<String, Object>> movies = client.collections.use("Movie");
movies.data.insertMany(dataObjects.toArray(new Map[0]));
// Perform a vector search
var response = movies.query.nearText("sci-fi", q -> q.limit(2));
for (var obj : response.objects()) {
System.out.println(obj.properties());
}
client.close();
Flat Index RQ 量化 - 正式发布
带有 RQ 量化的 Flat Index,在 v1.34 中作为预览版引入,现在在 Weaviate v1.35 中正式发布!
这种强大的组合可以提供
- 更快的查询 - 较小的向量大小可提高查询性能
- 内存效率 - 使用 8 位或 1 位 RQ 压缩高达 4 倍 - 32 倍
- 非常适合多租户 - 非常适合许多小型租户,其中暴力搜索足够快
- 生产就绪 - 经过彻底测试和优化,可用于实际工作负载
量化选项
现在,Flat Index 的 8 位 RQ 和 1 位 RQ 均已 GA
from weaviate.classes.config import Configure
# 8-bit RQ for high recall
client.collections.create(
name="ProductCatalog",
vector_config=Configure.Vectors.text2vec_openai(),
vector_index_config=Configure.VectorIndex.flat(),
quantizer=Configure.VectorIndex.Quantizer.rq(
compression_level=8 # 8-bit quantization
)
)
# 1-bit RQ for maximum compression
client.collections.create(
name="LogEmbeddings",
vector_config=Configure.Vectors.text2vec_openai(),
vector_index_config=Configure.VectorIndex.flat(),
quantizer=Configure.VectorIndex.Quantizer.rq(
compression_level=1 # 1-bit quantization
)
)
| 量化 | 内存减少 | 召回率(重分值限制 100) | 用例 |
|---|---|---|---|
| 8 位 RQ | 4 倍 | ~100% | 高精度要求 |
| 1 位 RQ | 32 倍 | ~100% | 最大压缩,良好的精度 |
Flat Index RQ 量化与动态索引无缝协作,允许租户在增长时自动升级到 HNSW。
新集合的默认压缩
Weaviate v1.35 继续优化新集合的默认设置。虽然 RQ 压缩自 v1.33 以来一直可用于 HNSW 索引,但Flat 和动态索引现在也支持默认量化设置。
设置默认量化
# Set 8-bit RQ as default for all new collections
DEFAULT_QUANTIZATION: 'rq8'
# Options: none, rq8, rq1, bq, pq, sq
这可确保您的集合之间具有一致的压缩,同时仍然允许在需要时对每个集合进行覆盖。
增强的备份压缩
Weaviate v1.35 引入了 zstd 压缩支持,用于备份,与默认的 gzip 压缩相比,提供明显更好的压缩性能。
Zstandard (zstd) 是一种现代压缩算法,具有
- 更好的压缩比 - 更小的备份文件
- 更快的压缩速度 - 减少备份时间
- 更快的解压缩速度 - 更快的还原操作
- 可调节的压缩级别 - 平衡速度和压缩
zstd 压缩已添加到以下 Weaviate 版本:v1.35.0、v1.34.1、v1.33.6 和 v1.32.18。
可用压缩选项
# Using zstd compression
client.backup.create(
backup_id="my-backup",
backend="s3",
include_collections=["MyCollection"],
compression_level="ZstdDefaultCompression" # or ZstdBestSpeed, ZstdBestCompression
)
# Traditional gzip compression (still available)
client.backup.create(
backup_id="my-backup",
backend="s3",
include_collections=["MyCollection"],
compression_level="DefaultCompression" # or BestSpeed, BestCompression
)
# Disable compression
client.backup.create(
backup_id="my-backup",
backend="s3",
include_collections=["MyCollection"],
compression_level="NoCompression"
)
压缩级别选项
对于 zstd(Weaviate v1.35+)
ZstdDefaultCompression- 平衡速度和压缩ZstdBestSpeed- 最快的压缩ZstdBestCompression- 最大压缩比
注意: zstd 压缩在 Weaviate v1.35.0、v1.34.1、v1.33.6 和 v1.32.18 或更高版本中可用。
数据库操作模式
Weaviate v1.35 引入了 操作模式,允许您控制每个节点可以处理的类型的操作。这对于以下情况特别有用:
- 负载均衡 - 分离读写流量
- 维护操作 - 在提供读取的同时使节点离线进行写入
- 扩展场景 - 为查询工作负载添加只读副本
- 备份创建 - 在不影响写入性能的情况下创建备份
可用模式
每个 Weaviate 节点可以设置为四种操作模式之一
| 模式 | 描述 | 允许的操作 |
|---|---|---|
| ReadWrite | 默认模式 | 所有读写操作 |
| WriteOnly | 写入优先 | 仅写入操作 |
| ReadOnly | 读取优先 | 读取操作 + 备份创建 |
| ScaleOut | 扩展模式 | 与 ReadOnly 相同 + 复制 CUD 操作 |
配置
使用 OPERATIONAL_MODE 环境变量设置运行模式
# Set node to read-only mode
OPERATIONAL_MODE: 'ReadOnly'
您还可以使用 运行时配置 功能在运行时更改运行模式
# overrides.yaml
operational_mode: ReadOnly
此功能为节点行为提供细粒度控制,从而实现更复杂的部署架构。
Weaviate Embeddings - 多模态支持
Weaviate v1.35 将 Weaviate Embeddings 扩展到支持 多模态文档嵌入,使构建强大的文档检索应用程序更加容易。
新的 multi2multivec-weaviate 模块使您能够
- 嵌入文档图像 - 将文档页面转换为可搜索的向量
- 使用文本查询进行搜索 - 使用自然语言查找相关的文档页面
- 构建 RAG 应用程序 - 为问答系统检索特定页面
- 简化文档处理 - 无需外部嵌入服务
主要用例:文档检索
此集成针对 基于图像的文档检索进行了优化。嵌入文档页面的图像,然后使用文本查询检索相关页面
from weaviate.classes.config import Configure, Property, DataType
# Create collection for document pages
client.collections.create(
"DocumentPages",
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="doc_page", data_type=DataType.BLOB), # Store page images
],
vector_config=[
Configure.MultiVectors.multi2vec_weaviate(
name="document",
image_field="doc_page", # Specify which property contains images
model="ModernVBERT/colmodernvbert" # Document retrieval model
)
],
)
导入文档页面
import base64
# Convert image to base64
def url_to_base64(url):
image_response = requests.get(url)
return base64.b64encode(image_response.content).decode("utf-8")
collection = client.collections.use("DocumentPages")
with collection.batch.fixed_size(batch_size=10) as batch:
for src_obj in source_objects:
page_b64 = url_to_base64(src_obj["page_img_path"])
batch.add_object(
properties={
"title": src_obj["title"],
"doc_page": page_b64 # Add page image in base64
}
)
使用文本搜索文档
# Find relevant document pages using text queries
collection = client.collections.use("DocumentPages")
response = collection.query.near_text(
query="financial statements Q3 2024",
limit=5
)
for obj in response.objects:
print(f"Found: {obj.properties['title']}")
可用模型
目前,只有一个模型可用
- ModernVBERT/colmodernvbert - 针对视觉文档检索任务进行微调的后期交互模型
该模型专为文档检索场景而设计,能够根据文本查询提供出色的性能来查找相关页面。
主要优势
- 无缝集成 - 与您现有的 Weaviate Cloud 凭据配合使用
- 无需外部服务 - 嵌入由 Weaviate 直接生成
- 针对文档优化 - 专为文档检索构建的模型
- 多模态搜索 - 图像数据上的文本查询
Weaviate Embeddings(包括多模态支持)仅在 Weaviate Cloud 实例上可用。它不适用于自托管部署。
运行时可配置的 OIDC 证书
Weaviate v1.35 通过使 OIDC 身份验证设置可运行时配置来增强安全性灵活性。这意味着您现在可以在不重新启动 Weaviate 实例的情况下更新 OIDC 证书和身份验证参数。
可配置的 OIDC 参数
以下 OIDC 设置现在可以在运行时更新
authentication_oidc_certificate- 更新 OIDC 证书authentication_oidc_client_id- 更改客户端 IDauthentication_oidc_groups_claim- 修改组声明authentication_oidc_issuer- 更新颁发者 URLauthentication_oidc_jwks_url- 更改 JWKS 端点authentication_oidc_scopes- 修改范围authentication_oidc_skip_client_id_check- 切换客户端 ID 检查authentication_oidc_username_claim- 更新用户名声明
工作原理
使用运行时配置更新 OIDC 设置,无需重新启动
# overrides.yaml
authentication_oidc_certificate: |
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKL0UG+mRKmzMA0GCSqGSIb3DQEBCwUA...
-----END CERTIFICATE-----
authentication_oidc_issuer: 'https://auth.example.com'
authentication_oidc_client_id: 'weaviate-client'
Weaviate 将根据您配置的 RUNTIME_OVERRIDES_LOAD_INTERVAL(默认:2 分钟)自动重新加载这些设置。
优势
- 零停机时间更新 - 在不中断服务的情况下更新身份验证
- 证书轮换 - 无缝轮换 OIDC 证书
- 动态配置 - 根据运营需求调整 OIDC 设置
- 更快的故障排除 - 快速测试不同的 OIDC 配置
此功能是 Weaviate 更广泛的运行时配置管理系统的一部分,该系统允许各种设置在运行时更新。
多项性能改进和修复
一如既往,Weaviate v1.35 包含代码库中大量的性能改进和错误修复。以下是一些亮点
- 模块和集成:增强了向量化器和排序器模块的支持,包括 VoyageAI v3.5、Cohere dimensions 和 BaseURL 设置、Google batch API 以及 text2vec/multi2vec 模块的批量处理。
- 复制和扩展:具有可配置的文件块大小的复制扩展功能、改进的重试逻辑、更好的错误处理以及分布式部署的增强同步功能。
- 内部 gRPC:内部 gRPC 服务器实现作为 REST 集群 API 的等效项,具有连接管理、维护模式拦截器、gzip 压缩以及改进的文件复制方法。
- 性能和优化:性能改进包括减少锁争用、优化的段处理、改进的内存管理、增加批量工作程序的并发性以及更好的队列工作程序利用率。
- 错误修复:各种错误修复,解决了互斥体行为、竞争条件、恐慌预防、租户加载问题、缓存问题以及与复制快照的兼容性问题。
这些改进加起来,使 Weaviate 实例更快、更稳定、更高效。
我们始终建议运行最新版本的 Weaviate,以受益于这些持续的改进。🚀
社区贡献
Weaviate 是一个开源项目,我们始终很高兴看到我们出色的社区的贡献。感谢所有为本次发布做出贡献的人!
如果您有兴趣为 Weaviate 贡献代码,请查看我们的 贡献指南,并浏览 GitHub 上的开放问题。寻找 good-first-issue 标签,找到很好的入门点!
总结
Weaviate v1.35 带来了生命周期管理、运营灵活性和文档检索的强大新功能,同时将关键功能从预览版移至通用可用版。
主要亮点
- 对象 TTL - 自动对象过期和删除
- Java v6 客户端 GA - 现代、惯用的 Java 客户端
- Flat Index RQ GA - 生产就绪的扁平索引量化
- 增强的备份 - zstd 压缩,用于更快、更小的备份
- 运行模式 - 对节点行为进行细粒度控制
- 多模态嵌入 - 使用 Weaviate Embeddings 进行文档检索
- 运行时 OIDC - 动态身份验证配置
准备好开始了吗?
该版本在 GitHub 上作为开源提供,并且已经可在 Weaviate Cloud 上的新沙盒中使用。
对于升级自托管版本的人员,请查看 迁移指南,了解特定版本的说明。
感谢您的阅读,祝您向量搜索愉快! 👋
准备开始构建了吗?
请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。