为了简化对 Buddy 插件的控制,特别是在开发新插件或修改现有插件时,提供了启用和禁用 Buddy 插件的命令。这些命令在运行时临时生效,重启守护进程或执行 Buddy 重置后将恢复默认。要永久禁用插件,必须将其移除。
您需要插件的完全限定包名来启用或禁用它。要查找包名,可以运行 SHOW BUDDY PLUGINS 查询,并查看 package 字段中的全限定名称。例如,SHOW 插件的完全限定名称是 manticoresoftware/buddy-plugin-show。
ENABLE BUDDY PLUGIN <username/package name on https://packagist.org/>
注意:ENABLE BUDDY PLUGIN 需要 Manticore Buddy。如果不起作用,请确保已安装 Buddy。
此命令重新激活之前禁用的 Buddy 插件,使其能够再次处理您的请求。
ENABLE BUDDY PLUGIN manticoresoftware/buddy-plugin-show
DISABLE BUDDY PLUGIN <username/package name on https://packagist.org/>
此命令停用一个活动的 Buddy 插件,阻止其处理后续的任何请求。
DISABLE BUDDY PLUGIN manticoresoftware/buddy-plugin-show
禁用后,如果尝试执行 SHOW QUERIES 命令,将会遇到错误,因为插件已被禁用。
Last modified: August 28, 2025
RELOAD PLUGINS FROM SONAME 'plugin_library'
从给定库重新加载所有插件(UDF、排序器等)。从某种意义上说,重新加载过程是事务性的,确保:
- 所有插件都成功更新到新版本;
- 更新是原子的,意味着所有插件同时被替换。该原子性确保使用重新加载库中多个函数的查询不会混用旧版本和新版本。
在 RELOAD 期间,插件集保证是一致的;它们要么全部是旧的,要么全部是新的。
重新加载过程也是无缝的,因为某个版本的重新加载插件将始终可用于并发查询,无任何临时中断。这比使用 DROP 和 CREATE 语句对重加载的改进要好。使用那些语句时,在 DROP 和随后的 CREATE 之间有一个短暂窗口期,在此期间查询在技术上引用一个未知插件,因此会失败。
如果有任何失败,RELOAD PLUGINS 不执行任何操作,保留旧插件,并报告错误。
在 Windows 上,覆盖或删除当前正在使用的 DLL 库可能会有问题。然而,你仍然可以重命名它,将新版本置于旧名称下,然后 RELOAD 将起作用。成功重新加载后,你也可以删除重命名的旧库。
mysql> RELOAD PLUGINS FROM SONAME 'udfexample.dll';
Query OK, 0 rows affected (0.00 sec)
Last modified: August 28, 2025
排序插件允许您实现一个自定义排序器,该排序器接收文档中匹配的所有关键词的出现情况,并计算一个 WEIGHT() 值。它们可以按照以下方式调用:
SELECT id, attr1 FROM test WHERE match('hello') OPTION ranker=myranker('option1=1');
调用流程如下:
XXX_init() 在每次查询每次表时仅调用一次,在最开始时被调用。通过一个 SPH_RANKER_INIT 结构传递一些查询范围内的选项,包括用户选项字符串(例如,上面示例中的 "option1=1")。
XXX_update() 对于每个匹配的文档,被多次调用,每次调用都提供一个匹配关键词的出现情况,一个 SPH_RANKER_HIT 结构。每个文档内的出现情况保证按照 hit->hit_pos 值的升序传递。
XXX_finalize() 在没有更多关键词出现情况时,对每个匹配的文档调用一次,必须返回 WEIGHT() 值。这是唯一必须实现的函数。
XXX_deinit() 在每次查询结束时调用一次。
Last modified: August 28, 2025
令牌过滤器插件允许您实现根据自定义规则创建令牌的自定义分词器。有两种类型:
在文本处理管道中,令牌过滤器将在基本分词器处理完成后运行(基本分词器处理来自字段或查询的文本并生成令牌)。
索引时分词器由 indexer 在将源数据索引到表中时创建,或者由 RT 表在处理 INSERT 或 REPLACE 语句时创建。
插件声明格式为 library name:plugin name:optional string of settings。插件的初始化函数可接受任意设置,这些设置可以以 option1=value1;option2=value2;.. 的字符串格式传递。
示例:
index_token_filter = my_lib.so:email_process:field=email;split=.io
索引时令牌过滤器的调用工作流程如下:
XXX_init() 在 indexer 创建令牌过滤器并传入空字段列表后,以及在 indexer 获取表结构及实际字段列表后被调用。它必须返回零表示初始化成功,否则返回错误描述。
XXX_begin_document 只在 RT 表的 INSERT/REPLACE 每个文档时调用。它必须返回零表示调用成功,否则返回错误描述。通过 OPTION token_filter_options,可以向该函数传递额外参数/设置。INSERT INTO rt (id, title) VALUES (1, 'some text corp@space.io') OPTION token_filter_options='.io'
XXX_begin_field 在处理字段的基本分词器之前对每个字段调用一次,参数为字段编号。
XXX_push_token 对基本分词器生成的每个新令牌调用一次,参数为源令牌。它必须返回令牌、由令牌过滤器产生的额外令牌数量及该令牌的位置偏移。
XXX_get_extra_token 如果 XXX_push_token 指出存在额外令牌,则多次调用。它必须返回额外令牌及其位置偏移。
XXX_end_field 在当前字段的源令牌处理完成后调用一次。
XXX_deinit 在索引结束时调用。
必须定义以下函数:XXX_begin_document、XXX_push_token 和 XXX_get_extra_token。
查询时分词器在每次全文搜索调用时,对所涉及的每个表都会创建。
查询时令牌过滤器的调用工作流程如下:
XXX_init() 在解析查询之前对每个表调用一次,参数为最大令牌长度和通过 token_filter 选项设置的字符串SELECT * FROM index WHERE MATCH ('test') OPTION token_filter='my_lib.so:query_email_process:io'
它必须返回零表示初始化成功,否则返回错误描述。
XXX_push_token() 对基本分词器生成的每个令牌调用一次,参数包括基本分词器生成的令牌、源查询字符串中的原始令牌指针和原始令牌长度。它必须返回令牌及其位置偏移。
XXX_pre_morph() 在令牌传递给形态学处理器前调用一次,参数为令牌引用和停用词标志。该函数可能会设置停用词标志,将该令牌标记为停用词。
XXX_post_morph() 在令牌经过形态学处理器处理后调用一次,参数为令牌引用和停用词标志。该函数可能会设置停用词标志,将该令牌标记为停用词。它必须返回一个标志,非零表示使用形态学处理前的令牌。
XXX_deinit() 在查询处理结束时调用。
缺少这些函数是允许的。
Last modified: August 28, 2025