blog-post

Manticore Search 5

今天 Manticore 团队很高兴地宣布 Manticore Search 5.0.0 。我们花了将近 5 个月,450 次提交和将近 5 万行代码更改。我们要感谢所有的:

在我们的旅程中给予我们帮助。请欢迎新版本 Manticore Search 5.0.0!

默认存储所有

我们的老用户可能还记得,当 Manticore 在 2017 年从 Sphinx 分叉时,它的数据库功能在某种意义上是非常有限的,它更像是另一个数据库的扩展,而不是一个独立的数据库,例如:

  • 如果你想存储原始内容,你必须创建一个字符串属性并将其放在那里,这可能会占用大量内存,因为 Manticore 当时只有行存储,这要求将所有属性存储在 RAM 中。
  • 你甚至不能运行 CREATE TABLE 来创建一个新表,你只能向配置文件中添加一个新模式。

然后在 Manticore 中我们添加了:

  • 适用于全文字段的文档存储,使得可以通过将原始文档存储在磁盘上来节省内存。
  • 实时模式以启用像 CREATE TABLE 这样的命令。
  • 新的数据类型 text 默认是已索引 + 存储的。

但是在普通模式下,你仍然需要指定 stored_fields = ...

你不再需要这样做,自 Manticore 5 起,所有字段默认都存储。如果你不需要这个,你可以通过指定 stored_fields = (空值)来禁用它。这将使所有字段为非存储。

次级索引

Manticore 5 启用了对 Manticore Columnar Library 1.15.2 的支持,这增加了对 次级索引 的支持。该功能将在 Manticore 5 中提供,但仍处于 beta 阶段,因此:

  • 默认情况下,对于普通和实时列存储和行存储索引,次级索引是开启的(如果正在使用 Manticore Columnar Library ),
  • 但要在搜索中启用它,你需要在配置文件中设置 secondary_indexes = 1,或者使用 SET GLOBAL

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

Manticore Columnar Library 使用 分段几何模型索引 ,该模型利用了索引键与其在内存中的位置之间的学习映射。这种映射的简洁性,加上一个特殊的递归构造算法,使得 PGM 索引在空间上超越传统索引数量级,同时仍提供最佳的查询和更新性能。

默认的伪分片

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

Web 命令行接口

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

Web CLI

只读模式

新的 只读模式 允许你指定只处理读查询的监听器,忽略所有写入。如果你希望让 Manticore Search 公开访问互联网或你本地网络的较不安全部分,或者只是想确保只应进行读取的应用程序无法以任何方式修改你的数据,这将很有用。

更快的数据加载

之前你可以通过 HTTP JSON 协议提供多个写入命令,但它们是逐个处理的,现在它们作为一个事务一起处理。通过 HTTP 进行的批量 INSERT/REPLACE/DELETE 现在与通过 SQL 一样是批量的。甚至更多:

分块传输编码

Manticore 5 在 HTTP 协议中支持 分块传输编码 。现在你可以在应用程序中使用分块传输来以较低的资源消耗传输大批量数据(因为你不需要计算 Content-Length)。在服务器端,Manticore 现在总是以流式方式处理传入的 HTTP 数据,而不必等待整个批量数据像以前那样完全传输,这:

  • 减少了峰值内存消耗,从而降低了 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,因此不再需要至少一个全文字段。

快速获取列属性

In Manticore 5 我们添加了 Fast fetching 用于由 Manticore Columnar Library 支持的属性:像 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 协议还启用了 Nested filters 支持。之前您不能在 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。请通过以下方式分享您对此的反馈:

安装Manticore Search

安装Manticore Search