# Migrating from Sphinx

在本文中，我们将讨论如何从 Sphinx 升级。
Manticore Search 是 Sphinx Search 2.3 的一个分支。虽然代码的许多部分已经 **重构** 并 **改进**，但没有需要大量努力才能升级的破坏性变更。在大多数情况下，升级过程与升级 Sphinx 的次要版本相同，这主要只是替换二进制可执行文件。

#### 索引


Manticore 使用与 Sphinx 2.x 相同的索引格式，使用 Sphinx 创建的索引将被 Manticore 守护进程加载。唯一需要重新索引的情况是，如果您使用的是 Sphinx 2.2 之前的索引，这些索引使用了已弃用的 `str2ordinal`/`str2wordcount` 属性。

作为一个总体考虑，最好先测试升级是否能顺利通过，然后再在生产实例上执行升级。测试时应检查索引是否能正常加载，以及常见的查询是否按预期工作。

在使用远程节点的分布式索引情况下，应首先升级主节点。主节点与节点之间的 API 协议已进行了一些更新，但主节点仍可以使用旧版本与节点通信。
  
  
#### 配置


与 Sphinx 2.3.2 相比，Manticore 中有一些设置已被弃用。作为提醒，在 2.3.1 版本中，`prefork` 和 `fork` 工作模式已被移除。此外，在 Sphinx 2.2 中，`charset_type`、`enable_star` 和 `max_matches` 等选项已从 sphinx.conf 中弃用（`max_matches` 仍然是查询设置，只是不再全局生效）。值得一提的是，`crc` 字典模式在 Manticore 中仍然受支持，因为在某些情况下它可能比 'keywords' 模式更有优势。
  
  
#### 查询


在客户端通信方面，如果您使用的是 SphinxQL，则客户端无需任何操作。

如果您使用的是 SphinxAPI，自分支以来我们未对客户端库进行任何更改。但是，如果您是从较旧的 Sphinx 版本升级而来，应升级到最新的 API 客户端库。

SphinxSE MySQL 插件已有一段时间未更新，但在 Manticore 中我们引入了对 FEDERATED 引擎的支持，这比 SphinxSE 更佳选择，因为 FEDERATED 引擎包含在所有 MySQL 变体中（而 SphinxSE 仅与 MariaDB 一起分发）。
  
  
#### 编译


Manticore 从 **autotools** 切换到了 **cmake**。代码需要更新版本的编译器。更多信息请参阅 [compiling](https://docs.manticoresearch.com/latest/html/installation.html#compiling-manticore-from-source) 文档。
  
  
#### Windows 上的升级


停止 Sphinx 服务。
用新文件替换所有旧的可执行文件和库。
Sphinx 设置的现有服务可以无问题地启动 Manticore。如果您想替换它，只需运行 `searchd.exe --delete` 和 `searchd.exe --install`。
  
  
#### 从 Linux 包升级


Manticore 包使用与 Sphinx 相同的配置文件位置：`/etc/sphinxsearch/sphinx.conf` 或 `/etc/sphinx/sphinx.conf`，具体取决于发行版。

发生变化的是 searchd 运行的用户以及使用的文件夹。Sphinx 在 `sphinx`/`sphinxsearch` 用户下运行，并使用 `/var/lib/sphinxsearch`、`/var/log/sphinxsearch` 和 `/var/run/sphinx` 文件夹。

Manticore 在 `manticore` 用户下运行，默认文件夹为 `/var/lib/manticore`、`/var/log/manticore` 和 `/var/run/manticore`。

首先使用 `service sphinxsearch stop` 或 `systemctl stop sphinx` 停止 Sphinx 服务，具体取决于使用的发行版。

您可以直接使用 `dpkg -i package` 或 `rpm -Uvh package` 进行升级，并选择保留现有的 sphinx.conf。

由于 Manticore 服务使用 `/var/run/manticore` 来检查 pid 文件的存在，因此 `sphinx.conf` 中唯一需要更改的是将 `pid_file` 的位置更改为 `/var/run/manticore/searchd.pid`。我们建议在 sphinx.conf 中更改 pid 文件的位置，而不是编辑 manticore.service 文件，因为未来的升级可能会覆盖服务文件中的更改，并需要重新打补丁。

接下来，设置现有 Sphinx 文件夹的权限为 `manticore` 用户。

此时，您可以使用 `service manticore start` 或 `systemctl start manticore` 启动 Manticore 服务。

如果您需要帮助从 Sphinx 升级，请不要犹豫，在官方 Slack 频道或 [论坛](http://forum.manticoresearch.com) 上提问。
