blog-post

Manticore Search 5

今天 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 Columnar Library 1.15.2 的支持,该库增加了对 二级索引 的支持。该功能在 Manticore 5 中处于测试阶段,因此:

  • 对于普通和实时列存储和行存储索引,默认启用构建二级索引(如果正在使用 Manticore Columnar Library ),
  • 但要启用搜索,你需要在配置文件中或使用 SET GLOBAL 设置 secondary_indexes = 1

新功能在除旧版 Debian Stretch 和 Ubuntu Xenial 之外的所有操作系统中均受支持。

Manticore Columnar Library 使用 分段几何模型索引 ,它利用索引键与其在内存中位置之间的学习映射。该映射的简洁性,加上独特的递归构造算法,使 PGM 索引在空间上比传统索引占用更少的资源,同时仍提供最佳的查询和更新时间性能。

默认伪分片

在之前的版本中添加的伪分片经过测试和优化,现在默认启用。提醒一下,伪分片并行化搜索查询执行,利用你所有的 CPU 核心。

Web 命令行界面

Manticore 5 提供了新的 /cli 端点,使通过 HTTP 运行 SQL 查询变得更加简单。

Web CLI

只读模式

新的 只读模式 允许你指定仅处理读取查询的监听器,忽略任何写入。这在你想让 Manticore Search 从互联网或本地网络的较不安全部分可访问,或者只是想确保应该只读取的应用程序无法以任何方式修改你的数据时非常有用。

更快的数据加载

之前你可以通过 HTTP JSON 协议提供多个写入命令,但它们是逐个处理的,现在它们作为单个事务处理。通过 JSON 进行的批量 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,因此不再需要至少有一个全文字段的要求。

快速获取列属性

在 Manticore 5 中,我们添加了 快速获取 功能,支持由 Manticore 列式库 支持的属性:像 select * from <columnar table> 这样的查询现在比以前快得多,特别是当模式中有许多字段时。

隐式截止

Manticore 现在通过自动选择最佳的 cutoff 值,不再花费时间和资源处理您在结果集中不需要的数据。对于某些查询,这大大提高了性能。缺点是它会影响 SHOW META 中的 total_found 和 JSON 输出中的 hits.total 。只有在您看到 total_relation: eq 时,它才是准确的,而 total_relation: gte 意味着实际匹配的文档数量大于您获得的 total_found 值。要保留以前的行为,您可以使用搜索选项 cutoff=0,这会使 total_relation 始终为 eq

HTTP JSON 搜索选项

自 Manticore 5 起,如果您通过 HTTP JSON 协议或任何基于它的客户端使用 Manticore,您可以设置各种搜索选项。

HTTP JSON 嵌套过滤器

自 Manticore 5 起,JSON 协议还支持 嵌套过滤器 。之前,您无法在 JSON 中编码像 a=1 and (b=2 or c=3) 这样的内容:must(AND)、should(OR)和 must_not(NOT)仅在最高级别上工作。现在它们可以嵌套。

还有更多

以上只是自 Manticore 4.2.0 以来所做工作的部分内容,并已在新版本中普遍可用。请阅读:

🚀 13 个主要更改
✅ 20+ 个次要更改
🐞 45 个错误修复

变更日志 中。

我们希望您会喜欢使用新版本的 Manticore Search。请通过以下方式分享您的反馈:

安装Manticore Search

安装Manticore Search