⚠️ 此页面为自动翻译,翻译可能不完美。

Migrating indexes to version 3

Manticore Search 3 首次引入了索引兼容性的破坏性变更,无法加载使用2.x版本创建的现有索引。这意味着在升级searchd到3.x之前,必须准备好索引。

要使索引使用新格式,有两种选择:

  1. 完全重建索引。如果索引不是非常大且不是实时索引,这是最简单的途径。
  2. 使用转换工具,可以自动将任何类型的索引(普通、percolate、实时)从Manticore 2/Sphinx 2格式转换为新格式

在开始迁移之前,有几项需要注意:

  • 文档ID现在是正的有符号大整数,之前是无符号大整数
  • 索引使用kill列表的机制发生了显著变化
  • 在开始转换实时索引之前,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定义)。由于转换器会创建现有索引的新版本,因此需要考虑额外的空间需求。如果空间是问题,应逐个转换索引。

如果不使用kill列表,使用转换器的最简单方法是直接转换所有内容:

$ 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

请注意,hitlists文件(.spp)只是移动到新版本(因为它没有发生任何变化),并且不包含在旧版本的备份中。一旦完成版本3的测试且没有问题,可以删除旧索引版本的备份。

对于增量索引,转换前应在配置中设置新的选项killlist_target。转换器也可以使用--killlist-target设置目标:

$ index_converter --config /home/myuser/sphinx.conf --index deltaindex --killlist-target mainindex:kl

第三种方法是转换增量索引,加载它,使用ALTER KILLLIST_TARGET设置目标并(重新)加载目标以应用kill列表。

如果您有任何问题、疑问或评论,请随时联系我们:

安装Manticore Search

安装Manticore Search