Manticore Search 3 首次带来了索引兼容性的中断,无法加载使用 2.x 创建的现有索引。这意味着在将 searchd 升级到 3.x 之前,索引需要准备好。
要使索引采用新格式,有两个选项:
- 完全重建索引。如果您的索引不是很大且不是实时的,这是一条简单的路。
- 使用转换工具,可以自动将任何类型的索引(普通、抽取、实时)从 Manticore 2 / Sphinx 2 格式转换为新格式。
在开始迁移之前,有几件事情需要注意:
- 文档 ID 现在是正有符号大整数,以前是无符号大整数。
- 使用封杀列表的索引机制已经发生了显著变化。
- 在开始转换实时索引之前,RAM 块必须是空的。如果有数据,应该使用 FLUSH RAMCHUNK 写入磁盘。此操作必须在现有的 2.x 上进行, 然后再执行升级。
- v3 不限制字符串 / json 属性的大小为每个索引 4GB。在某些情况下,过去索引不得不拆分成多个块,以便适应数据。在 v3 中,这样的索引可以减少到一个或更少数量的块(如果希望保留多线程搜索)。4GB 的限制也适用于 RT 索引。这意味着如果达到 4GB 阈值,OPTIMIZE 无法将 RT 块减少到一个块。转换受此影响的 RT 后,可以对新索引应用 OPTIMIZE,以实现单块 RT 索引。
Manticore Search 3 附带了一个可以将索引从 2.x 格式转换为 3.x 格式的伴随工具。该工具在一个名为 manticore-converter
的单独包中提供。此包不会以任何方式干扰或影响现有的 Manticore 安装,因此可以并行安装。
使用 index_converter
工具,您可以创建索引的 3.x 版本,当所有索引完成后,您开始升级 Manticore 包。
如果您只有一台服务器:
- 安装
manticore-converter
包。 - 使用
index_converter
在与现有数据文件夹不同的文件夹中创建索引的新版本(使用 –output-dir 选项)。 - 停止现有 Manticore,升级到 3.0,移动新索引到数据文件夹,启动 Manticore。
为了实现最小的停机时间,您可以复制 2.x 索引、配置(您需要在这里编辑索引、日志和不同端口的路径)和二进制文件到一个单独的位置,在一个单独的端口启动,并将您的应用程序指向它。
在升级到 3.0 并启动新的守护进程后,您可以将应用程序指回正常端口。如果一切正常,停止 2.x 副本并删除文件以释放空间。
如果您有一台备用服务器(例如测试或临时服务器),您可以先在这里进行索引升级,甚至安装 Manticore 3 进行多项测试,如果一切正常,将新索引文件复制到生产服务器。
如果您有多个可以从生产中移出的服务器,逐个进行升级并在每个服务器上执行升级。对于分布式设置,2.x searchd 可以作为主节点与 3.x 节点一起工作,因此您可以先在数据节点上进行升级,最后在主节点上进行升级。
转换工具可以一次迁移一个索引(使用 --index
),从给定的配置文件中迁移所有索引(使用 --all
)或从文件夹中迁移所有索引(由 --path
定义)。由于转换器将创建现有索引的新版本,因此需要考虑额外的空间。如果空间有限,索引应逐个转换。
使用转换器的最简单方法(如果您不使用封杀列表)就是将所有内容转换:
$ index_converter --config /home/myuser/sphinx.conf --all
默认情况下,v3 索引写入同一文件夹,旧索引复制时文件名带有 ‘.old’。新索引也可以使用 –output-dir 选项保存在不同的文件夹中。
$ index_converter --config /home/myuser/sphinx.conf --index myrtindex --output-dir /new/location
请注意,命中列表文件 (.spp) 会简单地移动到新版本(因为没有发生任何更改),并且未包含在旧版本的备份中。一旦对版本 3 的测试完成且没有问题,可以删除旧索引版本的备份。
在增量索引的情况下,在开始转换之前,应在配置中设置新选项 killlist_target。转换器也可以使用 –killlist-target 设置目标:
$ index_converter --config /home/myuser/sphinx.conf --index deltaindex --killlist-target mainindex:kl
第三个选项是转换增量索引,加载它,使用 ALTER KILLLIST_TARGET 设置目标,并(重新)加载目标以应用封杀列表。
如果您遇到任何问题、问题或建议,请随时与我们联系:
- 在 twitter
- 发送电子邮件至 [email protected]
- 在我们的 Forum 发表帖子
- 在我们的 Community Slack 中与我们聊天
- 通过我们的 bug tracker on GitHub 联系我们