今天 Manticore 团队非常激动地宣布 Manticore Search 5.0.0 。这次开发历时近 5 个月,450 次提交,近 5 万行代码的修改。我们想感谢所有:
在我们前进道路上给予帮助的人。请欢迎新版本 Manticore Search 5.0.0!
默认全部存储
我们的老用户可能还记得,当 Manticore 在 2017 年从 Sphinx 分叉出来时,它的数据库功能非常有限,它更像是另一个数据库的扩展,而不是一个独立的数据库,例如:
- 如果你想存储原始内容,你必须创建一个字符串属性并将其放在那里,这会占用大量 RAM,因为当时 Manticore 只有行式存储,需要将所有属性存储在 RAM 中。
- 你甚至不能运行
CREATE TABLE来创建新表,你只能在配置文件中添加新架构。
然后我们在 Manticore 中添加了:
- 全文字段的文档存储,这使得通过将原始文档存储在磁盘上节省 RAM 成为可能。
- 实时模式以启用
CREATE TABLE等命令。 - 新的数据类型
text默认被索引并存储。
但在普通模式下,你仍然需要指定 stored_fields = ...。
现在你不需要再这样做了,从 Manticore 5 开始,所有内容默认都存储。如果你不需要这个功能,可以通过指定 stored_fields = (空值)来禁用它。这将使所有字段都不存储。
二级索引
Manticore 5 支持 Manticore 列式库 1.15.2 ,它增加了对 二级索引 的支持。该功能在 Manticore 5 中处于 beta 阶段,因此:
- 默认情况下,对于普通和实时列式和行式索引(如果使用了 Manticore 列式库 ),构建二级索引是启用的,
- 但要启用搜索功能,你需要在配置文件中或使用
SET GLOBAL
设置
secondary_indexes = 1。
新功能在所有操作系统中都得到支持,除了旧版 Debian Stretch 和 Ubuntu Xenial。
Manticore 列式库使用 Piecewise Geometric Model 索引 ,它利用了索引键与其在内存中位置之间的学习映射。这种映射的简洁性,加上一种特殊的递归构造算法,使得 PGM 索引成为一种数据结构,其空间占用比传统索引小几个数量级,同时仍提供最佳的查询和更新时间性能。
默认伪分片
之前版本中添加的伪分片经过测试和优化,现在默认启用。提醒一下,伪分片通过并行化搜索查询执行,利用了你所有的 CPU 核心。
Web 命令行界面
Manticore 5 提供了新的 /cli 端点,通过 HTTP 更容易地运行 SQL 查询。

只读模式
新的 只读模式 允许你指定只处理读取查询的监听器,丢弃任何写入操作。如果你希望从互联网或本地网络中较不安全的部分访问 Manticore Search,或者只是确保只读的应用程序无法以任何方式修改你的数据,这会很有用。
更快的数据加载
之前你可以通过 HTTP JSON 协议提供多个写入命令,但它们是逐个处理的,现在它们作为单个事务处理。通过 JSON 的 HTTP 批量 INSERT/REPLACE/DELETE 现在与通过 SQL 的批量处理一样高效。而且还有更多:
分块传输编码
Manticore 5 现在支持 HTTP 协议中的
分块传输编码
。你现在可以在应用程序中使用分块传输来传输大批次数据,资源消耗更低(因为你不需要计算 Content-Length)。在服务器端,Manticore 现在总是以流式方式处理传入的 HTTP 数据,而无需等待整个批次传输完成,这:
- 降低了峰值 RAM 消耗,从而降低了 OOM 的可能性
- 降低了响应时间(我们的测试显示处理 100MB 批次时减少了 11%)
- 让你能够克服
max_packet_size
并传输比最大允许值
max_packet_size(128MB)大得多的批次,例如一次性传输 1GB。
100 Continue
此外,HTTP 协议现在支持 100 Continue 头,这让你可以通过 curl(包括各种编程语言使用的 curl 库)更快地传输大批次数据。curl 默认执行 Expect: 100-continue 并在实际发送批次前等待一段时间。之前你必须添加 Expect: 头,现在不需要了。
所有这些都使 Manticore 5 在通过 HTTP 加载数据方面更快。
无全文的 Manticore Search
作为全文搜索引擎,Manticore Search 始终至少需要一个全文字段。现在不再如此。你现在甚至可以在与全文搜索无关的情况下使用 Manticore,因此至少需要一个全文字段的要求已经取消。
快速获取列式属性
在 Manticore 5 中我们添加了
Fast fetching
用于由
Manticore Columnar Library
支持的属性:像 select * from <columnar table> 这样的查询现在比以前快得多,特别是当模式中有许多字段时。
隐式截断
Manticore 现在会自动选择最佳的 cutoff 值,不再花费时间和资源处理结果集中不需要的数据。对于某些查询,这大大提高了性能。缺点是它会影响
SHOW META
和 JSON 输出中的
hits.total
的 total_found。现在只有在看到 total_relation: eq 时才准确,而 total_relation: gte 表示实际匹配的文档数量大于您获得的 total_found 值。要保留之前的行为,可以使用搜索选项 cutoff=0,这会使 total_relation 始终为 eq。
HTTP JSON 搜索选项
自 Manticore 5 起,如果您通过 HTTP JSON 协议或基于它的任何客户端使用 Manticore,可以设置各种搜索选项。
HTTP JSON 嵌套过滤器
JSON 协议还支持
嵌套过滤器
自 Manticore 5 起。之前您无法在 JSON 中编写类似 a=1 and (b=2 or c=3) 的内容:must (AND)、should (OR) 和 must_not (NOT) 仅在最高层级上工作。现在它们可以嵌套。
还有更多
以上只是自 Manticore 4.2.0 以来所做工作的部分内容,现在已在新版本中全面推出。请阅读:
🚀 13 项重大变更
✅ 20+ 项次要变更
🐞 45 个错误修复
在 changelog 中。
我们希望您会喜欢使用新的 Manticore Search 版本。请通过以下方式分享您的反馈:
- 在 Community Forum 发布主题
- 在 GitHub 提交错误报告或功能请求
- 在 Public Slack Chat 中讨论
- 将电子邮件发送至 [email protected]
