我们很高兴宣布 Manticore Search 3.0.0 的发布,这是我们期待已久的首次重大版本发布。这是第一个与旧版本不兼容的 Manticore 版本。
下载地址为 此处 和 Manticore GitHub 页面 。Docker 镜像可在 Docker Hub 获取。
主要变更
Manticore Search 2 的一个主要问题是每个索引的字符串/JSON 属性限制为 4GB。为克服此限制,数据必须分片到多个索引中。版本 3 重新设计了索引存储,消除了此限制,使得可以减少分片数量(或直接使用单个索引),并且在受影响的情况下可以将 RealTime 索引完全优化为一个块。
由于新索引存储结构不同,索引兼容性已打破。使用 Manticore 2 创建的现有索引无法被 Manticore 3 加载,但可以通过 转换工具 轻松升级。
在动态更新属性(使用 UPDATE )方面也没有限制。之前字符串属性只能通过 REPLACE 命令更新,JSON 属性只能更新标量键值。
普通索引的 kill-lists 现在在索引加载/轮换时应用,而不是每个查询。包含 kill-lists 的索引需要定义 索引列表 ,在加载/轮换时应用 kill-lists。这消除了之前需要为索引搜索定义特定顺序的需求。如果您同时轮换多个索引,Manticore Search 会为您进行智能轮换——它会首先轮换未标记为 kill-lists 的索引,最后轮换标记为 kill-lists 的索引。
文档 ID 现在为正的 64 位整数,之前为无符号的 64 位整数。
其他改进
新增了 CONCAT() 函数——允许连接两个或多个字符串。如果您想连接非字符串参数,可以额外使用 TO_STRING()。
复制功能已获得多项改进:
node_address 指令——允许指定节点的网络地址
JOIN CLUSTER 通过提供集群中一个节点的地址和端口,使用 'AT' 子句实现更简单的语法
ALTER CLUSTER 集群 UPDATE 节点——用于更新集群中的节点列表
节点列表在 SHOW STATUS 中打印
性能说明
v3 中的 AND 查询通常更快。加速程度取决于关键词频率。测试显示,从集合中选取前 1000 个关键词时,多个常见关键词(约 10%)的增益较小,而部分关键词位于前 1000 末尾时增益可达 60% 以上。更罕见的关键词应提供更大的增益。
通配符搜索在 v3 中快了几个百分点。某些情况下的 OR 搜索可能慢几个百分点(在执行的测试中最多 9%),此问题将在未来版本中解决。包含大量磁盘块的 RT 索引现在显著更快。
得益于早期测试者,v3 已在生产环境中运行数千小时。以下是观察到的一些改进:
v3 在内存碎片化方面表现更好:

一些已在生产环境中测试 v3 的用户报告与 2.8 相比平均性能有所提升:

升级前需知?
您需要重新索引所有索引或使用 转换工具 。
如果您使用 kill-lists,索引声明中需要进行 更改 。在转换期间,RT 索引的 RAM 块中不应有数据(运行 FLUSH RAMCHUNK)。
对于分布式设置,迁移可以从数据节点(代理)开始到主节点,因为 运行 v2 的主节点可以与运行 v3 的代理通信。
搜索查询语法没有任何变化!所有连接协议无需任何更新或更改即可与 Manticore 3 一起工作。只要索引已加载,现有客户端可以简单地连接到新版本。
所有变更和迁移步骤的完整参考可在 迁移指南 中找到。
尽管 Manticore 3 已经经过多个早期采用者的大量生产测试,但仍可能存在一些问题。如果您在 github 跟踪器 上报告任何问题,我们将不胜感激。
有关 3.0.0 的完整变更日志,请参阅 发布说明 。
未来说明
关于 HTTP 协议,预计未来版本将进行以下更改:/search 端点将被弃用,/sql 响应格式将与 /json 端点相同。