在本文中,我们将讨论如何从 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 文档。
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 频道或 论坛 上提问。