# Manticore Search 3.0.0 is now available

我们很高兴宣布 Manticore Search 3.0.0 的发布，这是我们期待已久的首次重大版本发布。这是第一个与旧版本不兼容的 Manticore 版本。

下载地址为[此处](https://manticoresearch.com/downloads/)和[Manticore GitHub 页面](https://github.com/manticoresoftware/manticoresearch/releases/tag/3.0.0)。Docker 镜像可在[Docker Hub](https://hub.docker.com/r/manticoresearch/manticore)获取。

### 主要变更


Manticore Search 2 的一个主要问题是每个索引的字符串/JSON 属性限制为 4GB。为克服此限制，数据必须分片到多个索引中。版本 3 重新设计了索引存储，消除了此限制，使得可以减少分片数量（或直接使用单个索引），并且在受影响的情况下可以将 RealTime 索引完全优化为一个块。

由于新索引存储结构不同，索引兼容性已打破。使用 Manticore 2 创建的现有索引无法被 Manticore 3 加载，但可以通过[转换工具](https://docs.manticoresearch.com/latest/html/command_line_tools_reference/index_converter_command_reference.html)轻松升级。

在动态更新属性（使用[UPDATE](https://docs.manticoresearch.com/latest/html/sphinxql_reference/update_syntax.html)）方面也没有限制。之前字符串属性只能通过 REPLACE 命令更新，JSON 属性只能更新标量键值。

普通索引的 kill-lists 现在在索引加载/轮换时应用，而不是每个查询。包含 kill-lists 的索引需要定义[索引列表](https://docs.manticoresearch.com/latest/html/conf_options_reference/index_configuration_options.html#killlist-target)，在加载/轮换时应用 kill-lists。这消除了之前需要为索引搜索定义特定顺序的需求。如果您同时轮换多个索引，Manticore Search 会为您进行智能轮换——它会首先轮换未标记为 kill-lists 的索引，最后轮换标记为 kill-lists 的索引。

文档 ID 现在为正的 64 位整数，之前为无符号的 64 位整数。
  
  
### 其他改进


新增了[CONCAT()](https://docs.manticoresearch.com/latest/html/searching/expressions,_functions,_and_operators.html#expr-func-concat) 函数——允许连接两个或多个字符串。如果您想连接非字符串参数，可以额外使用 TO_STRING()。

复制功能已获得多项改进：

 - [node_address](https://docs.manticoresearch.com/latest/html/conf_options_reference/searchd_program_configuration_options.html#node-address) 指令——允许指定节点的网络地址

 - [JOIN CLUSTER](https://docs.manticoresearch.com/latest/html/replication.html#join-cluster) 通过提供集群中一个节点的地址和端口，使用 'AT' 子句实现更简单的语法

 - [ALTER CLUSTER](https://docs.manticoresearch.com/latest/html/replication.html#nodes-management) 集群 UPDATE 节点——用于更新集群中的节点列表

 - 节点列表在 SHOW STATUS 中打印



  
  
### 性能说明


v3 中的 AND 查询通常更快。加速程度取决于关键词频率。测试显示，从集合中选取前 1000 个关键词时，多个常见关键词（约 10%）的增益较小，而部分关键词位于前 1000 末尾时增益可达 60% 以上。更罕见的关键词应提供更大的增益。

通配符搜索在 v3 中快了几个百分点。某些情况下的 OR 搜索可能慢几个百分点（在执行的测试中最多 9%），此问题将在未来版本中解决。包含大量磁盘块的 RT 索引现在显著更快。

得益于早期测试者，v3 已在生产环境中运行数千小时。以下是观察到的一些改进：

v3 在内存碎片化方面表现更好：

![img](./manticore-search-3-0-0-is-now-available/ram_fragmentation_v2_3-1200x222.png)

一些已在生产环境中测试 v3 的用户报告与 2.8 相比平均性能有所提升：

![img](./manticore-search-3-0-0-is-now-available/query_times_v2_3-1200x569.png)
  
  
### 升级前需知？


您需要重新索引所有索引或使用[转换工具](https://docs.manticoresearch.com/latest/html/command_line_tools_reference/index_converter_command_reference.html#index-converter-command-reference)。

如果您使用 kill-lists，索引声明中需要进行[更改](https://docs.manticoresearch.com/latest/html/getting-started/migrate_from_manticore2.html#kill-list)。在转换期间，RT 索引的 RAM 块中不应有数据（运行 FLUSH RAMCHUNK）。

对于分布式设置，迁移可以从数据节点（代理）开始到主节点，因为 **运行 v2 的主节点可以与运行 v3 的代理通信**。

搜索查询语法没有任何变化！所有连接协议无需任何更新或更改即可与 Manticore 3 一起工作。只要索引已加载，现有客户端可以简单地连接到新版本。

所有变更和迁移步骤的完整参考可在[迁移指南](https://docs.manticoresearch.com/latest/html/getting-started/migrate_from_manticore2.html)中找到。

尽管 Manticore 3 已经经过多个早期采用者的大量生产测试，但仍可能存在一些问题。如果您在[github 跟踪器](https://github.com/manticoresoftware/manticoresearch/issues)上报告任何问题，我们将不胜感激。

有关 3.0.0 的完整变更日志，请参阅[发布说明](https://docs.manticoresearch.com/latest/html/releasenotes.html#version-3-0-0-6-may-2019)。
  
  
### 未来说明


关于 HTTP 协议，预计未来版本将进行以下更改：**/search** 端点将被弃用，**/sql** 响应格式将与 **/json** 端点相同。
