在本文中,我们将讨论如何从 Sphinx 升级。
Manticore Search 是 Sphinx Search 2.3 的一个分支。虽然代码的许多部分已经被 重构 和 改进,但没有需要重大努力的破坏性更改来从 Sphinx 升级。在大多数情况下,升级过程与在 Sphinx 小版本之间升级相同,主要只是替换二进制可执行文件。
索引
Manticore 使用与 Sphinx 2.x 相同的索引格式,使用 Sphinx 创建的索引将由 Manticore 守护进程加载。唯一需要重新索引的情况是,如果您使用的是 Sphinx 2.2 之前的索引,这些索引使用了 str2ordinal/str2wordcount 属性,这些属性在 Sphinx 2.2 中已被弃用。
作为一般考虑,最好先测试升级是否顺利通过,然后再在生产实例上执行升级。测试时要检查索引是否能正常加载,以及常见查询是否按预期工作。
在具有远程节点的分布式索引的情况下,主节点应首先升级。主节点与节点之间使用的 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 引擎的支持,这是一个更好的选择,因为 FEDERATED 包含在所有 MySQL 变体中(与仅与 MariaDB 一起分发的 SphinxSE 不同)。
编译
Manticore 从 autotools 切换到 cmake。该代码需要更新版本的编译器。有关更多信息,请查阅 编译 文档。
在 Windows 上升级
停止 Sphinx 服务。
用新的可执行文件和库替换所有旧的可执行文件和库。
由 Sphinx 设置的现有服务可以毫无问题地启动 Manticore。如果您想替换它,只需运行 searchd.exe --delete 和 searchd.exe --install。
从 Linux 包升级
Manticore 包使用相同的位置作为配置文件:/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。
首先停止 Sphinx 服务,使用 service sphinxsearch stop 或 systemctl stop 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 频道或 论坛 上询问。