Manticore Search 29.0.2 已发布。这次的主题主要是运维:分片表和分布式表更容易检查和维护,长时间运行的分片写入更可靠,围绕 RT 优化和备份的几条棘手失败路径也已修复。
本文涵盖了从 28.6.7 到 29.0.2 之间发布的所有内容。
升级说明
大多数安装都可以正常升级。没有表格式变更,现有数据和配置保持兼容。
有一条说明对使用原生分片表写入或复制状态传输(SST)的混合版本部署很重要:29.0.0 更改了内部 SHARD_WRITE API 和集群协议,以携带心跳数据。请先升级向其写入的远程分片代理,再升级协调器。对于复制,请在启动 SST 之前升级所有对等节点。
独立节点,以及既不使用原生分片表写入也不使用复制 SST 的部署,无需特殊处理。降级也可以在不重建数据的情况下进行,但应先降级协调器,再降级代理,并且当复制对等节点使用混合版本时不要运行 SST。
分布式表和分片表的原生 OPTIMIZE
OPTIMIZE TABLE
现在可以直接压缩分布式表和分片表:
OPTIMIZE TABLE products OPTION sync=1, cutoff=1;
对于分布式表,Manticore 会把请求的 cutoff 应用到每个本地 RT 组件和每个已配置的远程镜像。原生分片表在其物理 RT 表上使用同样的同步扇出方式。
之前,运维人员必须分别处理这些物理表。现在只需要逻辑表即可。对于这类表,命令本身就是同步执行的,因此成功就表示所请求的工作已经在选定目标上完成;远程目标的失败会被明确报告,而不是被一个看似成功的本地响应掩盖。
分片表设置现在可见
SHOW TABLE SETTINGS
现在也适用于原生分片表:
SHOW TABLE products SETTINGS;
它会返回由分片表包装器存储的统一分词器、词典和表设置。除了在手动排查表问题时很有用之外,这也为 Buddy 支持的功能提供了一种可靠方式来查看逻辑表的配置。
长时间分片写入不再依赖超大超时值
当刷新 RAM chunk 时,向量表可能会花费数秒构建 HNSW 数据。在分片表上,这可能会超过 agent_query_timeout:即使远程节点仍在正常工作,协调器也会放弃。
Manticore 现在会在长时间分片写入期间通过同一连接发送心跳回复。每个有效心跳都会作为滚动租约刷新超时,因此操作进行期间连接会保持存活。你不再需要用过大的查询超时来掩盖正常的刷新耗时。
同样的传输方式也用于较长的复制 SST 操作和同步分布式优化。这也是上面提到混合版本升级说明的原因。
向量搜索中的更多控制
本版本新增了 access_columnar_attrs 和 access_secondary,允许列式文件和二级索引文件使用缓冲的 file 访问或 mmap。这让运维人员可以直接选择更适合主机和工作负载的访问模式,而不是依赖单一固定行为。
列式 KNN 搜索 在重评分阶段每个候选项需要做的工作也更少了。完整精度的距离计算现在会先批处理,再进行最终排序。结果集不会改变;最终排名阶段只是开销更低了。
对话式搜索也获得了一项较小的可靠性改进:失败的 LLM 路由选择工具调用会在返回错误前最多重试三次。
可靠性修复
RT 优化和 KNN
一个并发更新如果增大了基于 blob 的属性,可能会在 OPTIMIZE TABLE 合并它时重新映射源磁盘块。随后,合并工作线程可能会继续沿着过时的内存地址运行并使 searchd 崩溃。现在会在合并调度点之后刷新源地址,覆盖常规属性复制和 KNN 构建两种情况。(Issue #4780
)
显式的 optimize_cutoff
值现在也会控制 KNN 压缩阈值。只要设置了全局或按表的 cutoff,向量表就不再继续使用单独的默认值。(Issue #4738
)
备份和客户端兼容性
Manticore Backup
1.10.3 修复了另一条与冻结相关的失败路径。如果备份在按表 FREEZE 之后失败,例如因为某个被冻结的文件在复制前消失,那么现在会释放两级冻结,RT 表也会保持可写。(Backup PR #140
)
Buddy 4.4.1 通过支持 @@query_cache_size 和初始化查询中的数值型系统变量值,恢复了 MySQL Connector/J 的初始化。(Issue #4434
)
查询检查、高亮和分布式内存
CALL SNIPPETS 和 HIGHLIGHT()在html_strip_mode=retain下现在会保留现有 HTML 元素边界,从而生成格式正确的嵌套标记。(Issue #4792 )SHOW THREADS在检查并发 HTTP SQL 查询时不再有 use-after-free 风险。(Issue #4678 )EXPLAIN QUERY在模板表上、且全文查询包含字段选择器时不再卡住。无效选择器现在会返回语法错误。(PR #4777 )- 已完成的分布式代理操作现在会在解析后释放大型请求和回复缓冲区,而不是一直保留到
agent_query_timeout过期。这减少了大型分布式请求之后主守护进程的内存占用。(Issue #4771 )
完整列表请参阅 29.0.2 版本更新日志 。
获取 Manticore Search 29.0.2
请使用安装指南 安装或升级 Manticore Search。如果你运行的是原生分片表或复制集群,请在切换生产流量之前,先按照升级说明中的发布顺序执行。
需要帮助或想联系我方?
- 加入我们的 Slack
- 访问 论坛
- 在 GitHub 上报告问题或提出功能建议
- 给我们发送邮件:
[email protected]

