# Manticore Search 5

今天 Manticore 团队非常激动地宣布 [Manticore Search 5.0.0](https://manticoresearch.com/install/)。这次开发历时近 5 个月，450 次提交，近 5 万行代码的修改。我们想感谢所有：

* [贡献者](https://github.com/manticoresoftware/manticoresearch/graphs/contributors)
* [问题报告者](https://github.com/manticoresoftware/manticoresearch/issues)
* [PGM 索引](https://pgm.di.unipi.it/) 的作者
* 以及 [客户](/clients/)

在我们前进道路上给予帮助的人。请欢迎新版本 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](https://gitlab.com/manticoresearch/columnar/)，它增加了对 [二级索引](https://manual.manticoresearch.com/Server_settings/Searchd#secondary_indexes) 的支持。**该功能在 Manticore 5 中处于 beta 阶段**，因此：
* 默认情况下，对于普通和实时列式和行式索引（如果使用了 [Manticore 列式库](https://github.com/manticoresoftware/columnar)），构建二级索引是启用的，
* 但要启用搜索功能，你需要在配置文件中或使用 [SET GLOBAL](https://manual.manticoresearch.com/Server_settings/Setting_variables_online) 设置 `secondary_indexes = 1`。

新功能在所有操作系统中都得到支持，除了旧版 Debian Stretch 和 Ubuntu Xenial。

Manticore 列式库使用 [Piecewise Geometric Model 索引](https://pgm.di.unipi.it/)，它利用了索引键与其在内存中位置之间的学习映射。这种映射的简洁性，加上一种特殊的递归构造算法，使得 PGM 索引成为一种数据结构，其空间占用比传统索引小几个数量级，同时仍提供最佳的查询和更新时间性能。

## 默认伪分片

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

## Web 命令行界面

Manticore 5 提供了新的 [/cli](https://manual.manticoresearch.com/Connecting_to_the_server/HTTP#/cli) 端点，通过 HTTP 更容易地运行 SQL 查询。

![Web CLI](./manticore-search-5-0-0/cli_browser.png)

## 只读模式

新的 [只读模式](https://manual.manticoresearch.com/Security/Read_only) 允许你指定只处理读取查询的监听器，丢弃任何写入操作。如果你希望从互联网或本地网络中较不安全的部分访问 Manticore Search，或者只是确保只读的应用程序无法以任何方式修改你的数据，这会很有用。

## 更快的数据加载

之前你可以通过 HTTP JSON 协议提供多个写入命令，但它们是逐个处理的，现在它们作为单个事务处理。通过 JSON 的 HTTP 批量 INSERT/REPLACE/DELETE 现在与通过 SQL 的批量处理一样高效。而且还有更多：

#### 分块传输编码

Manticore 5 现在支持 HTTP 协议中的 [分块传输编码](https://en.wikipedia.org/wiki/Chunked_transfer_encoding)。你现在可以在应用程序中使用分块传输来传输大批次数据，资源消耗更低（因为你不需要计算 `Content-Length`）。在服务器端，Manticore 现在总是以流式方式处理传入的 HTTP 数据，而无需等待整个批次传输完成，这：
* 降低了峰值 RAM 消耗，从而降低了 OOM 的可能性
* 降低了响应时间（我们的测试显示处理 100MB 批次时减少了 11%）
* 让你能够克服 [max_packet_size](https://manual.manticoresearch.com/Server_settings/Searchd#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](https://manual.manticoresearch.com/Creating_a_table/Data_types#fast_fetch) 用于由 [Manticore Columnar Library](https://github.com/manticoresoftware/columnar) 支持的属性：像 `select * from <columnar table>` 这样的查询现在比以前快得多，特别是当模式中有许多字段时。

## 隐式截断

Manticore 现在会自动选择最佳的 `cutoff` 值，不再花费时间和资源处理结果集中不需要的数据。对于某些查询，这大大提高了性能。缺点是它会影响 [SHOW META](https://manual.manticoresearch.com/Profiling_and_monitoring/SHOW_META#SHOW-META) 和 JSON 输出中的 [hits.total](https://manual.manticoresearch.com/Searching/Full_text_matching/Basic_usage#HTTP) 的 `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 协议还支持 [嵌套过滤器](https://manual.manticoresearch.com/Searching/Filters#Nested-bool-query) 自 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](https://manual.manticoresearch.com/Changelog) 中。

我们希望您会喜欢使用新的 Manticore Search 版本。请通过以下方式分享您的反馈：
* 在 [Community Forum](https://forum.manticoresearch.com/c/manticore-announcements-english/5) 发布主题
* 在 [GitHub](https://github.com/manticoresoftware/manticoresearch/issues/new/choose) 提交错误报告或功能请求
* 在 [Public Slack Chat](https://slack.manticoresearch.com/) 中讨论
* 将电子邮件发送至 contact@manticoresearch.com
