你好!
在 3.3.0 中我们引入了一种新的守护进程模式。我们称之为 实时模式(RT 模式)。它允许使用 CREATE TABLE 和 DROP TABLE 来管理你的索引(表)。普通模式(假设在配置文件中定义索引模式)也仍然得到支持。
在此之前,你可以向实时索引中插入和删除数据,但没有通过 SQL/HTTP 添加和删除索引的方法。
新模式通过在配置文件中指定 data_dir 来启用。请注意,配置文件仅用于守护进程设置,此模式下不允许包含 source 或 index 部分。
ALTER TABLE 现在可以用于更改索引设置,例如
ALTER TABLE products ignore_chars='.'
然而,这些新设置仅影响新插入的文档;它们不会影响索引中已有的文档。
data_dir
data_dir 指定所有新索引将被存储的目录。每个索引都存储在 data_dir 内部的单独文件夹中。你不得手动将索引添加到此文件夹中,因为由新 RT 模式下运行的守护进程创建的索引在内部结构上与普通模式下创建的索引不同。使用
IMPORT TABLE
导入旧索引。它会将索引文件复制到 data_dir 内部的新文件夹中,并执行必要的索引格式更改。
有关索引差异的更多细节,请参见下文。
RT 模式仅与 RT 或 PQ 索引一起工作。你不能在此模式下运行的守护进程中创建或导入普通索引。一个可能的解决方案是使用 ATTACH 将普通索引添加到 RT 索引(在旧模式下运行的守护进程中),然后使用 IMPORT TABLE 将该 RT 索引导入到在 RT 模式下运行的守护进程中。
如何备份
由于你不应该手动操作 data_dir 的内容,目前唯一安全的备份或移动 data_dir 到其他位置的方法是关闭守护进程,复制/移动 data_dir,然后重新启动守护进程。
复制
由于 复制 在节点上创建/删除索引,它仅与在新 RT 模式下运行的守护进程一起工作。
外部文件
在 CREATE TABLE 和 ALTER TABLE 中仅允许使用绝对路径的外部文件(词形变化、停用词、例外)。这是为了避免混淆,因为相对路径是相对于守护进程启动的文件夹,用户可能不知道这一点。
实现细节
data_dir 包含索引和一个 .json 文件,该文件列出了这些索引及其部分属性。此文件由守护进程修改,你不应手动更改它。
.json 配置中的所有路径都是相对路径。其想法是你可以将 data_dir 复制/移动到新节点/位置,修改配置文件中的 data_dir,然后从新位置运行守护进程,而无需任何其他更改。
还有索引格式差异(在 RT 模式和普通模式下创建的索引之间),其目的相同。在旧模式下创建的索引存储外部文件的完整路径。在 RT 模式下创建的索引仅存储文件名,路径是根据索引名称和配置中的 data_dir 值动态生成的。
在 RT 模式下运行时,守护进程处理外部文件(词形变化、例外或停用词文件)的方式也有明显差异。在引入 RT 模式之前,索引要么将外部文件嵌入到索引头中,要么从存储它们的位置使用它们(取决于设置)。现在,当 Manticore 在 RT 模式下运行时,嵌入功能已禁用。例如,当执行
CREATE TABLE (title text) wordforms ='/path/to/wordforms.txt'
词形变化、停用词和例外将被复制到 data_dir 内部的索引文件夹中。
IMPORT TABLE 基本上执行相同操作。它会将外部文件复制到 data_dir 内部的索引文件夹中。如果在创建多个索引时使用了相同的外部文件,这可能导致某些文件重复。然而,这并不一定意味着守护进程会额外使用 RAM。例如,如果多个索引使用了相同原始词形变化文件的副本,searchd 仅加载一个词形变化文件的实例。
如果你对新模式有任何疑问,请随时在以下地方提问:
我们的 公共 Slack 频道
我们的 公共论坛
或者通过我们的互动课程 " Manticoresearch - RT 模式 - 索引管理 " 自行探索。