首页 > 解决方案 > 如何禁用或更改共享服务器上单个用户的 MySQL 全文停用词?

问题描述

我想在我的数据库中使用全文索引搜索 MySQL 字段时禁用停用词(表类型 InnoDB,用于 MyBB 论坛),但我在托管公司的共享服务器上。

关于如何禁用停用词或将默认服务器内置列表更改为自己的表的所有说明,都需要使用 GLOBAL 命令并重新启动服务器 - 作为共享服务器上的用户,我都无法做到这一点。作为共享服务器上的用户,是否有可靠的方法来执行此操作?我试过以下没有运气:

在其他帖子之后,我能够进入 cPanel > PHPMyAdmin> 并使用 SQL 查询,创建一个“user_stopwords”表:

CREATE TABLE mybb_stopwords(value VARCHAR(30)) ENGINE = INNODB;
INSERT INTO mybb_stopwords(value) VALUES ('stopword1');

但是我可以实际指示 MySQL 使用该表的唯一方法是,如果我在 SINGLE 查询中输入以下行 - 它有效,但仅适用于 SESSION。

set session innodb_ft_user_stopword_table='database/mybb_stopwords';
alter table mybb_posts engine=innodb;
alter table mybb_threads engine=innodb;

会话一结束,它就会恢复使用 GLOBAL 服务器停用词列表...

接下来,我在用户级 my.cnf 首选项文件中尝试了以下变体,我的托管服务提供商告诉我每隔几个小时读取一次用户级首选项 - 但没有效果:

[mysql]                 ... or mysqld ...
ft_stopword_file = ""   ...or...
innodb_ft_user_stopword_table="database/mybb_stopwords"

但是以上方法都不起作用-每当我检查时:

show variables like 'ft_%';

它回复

ft_stopword_file: (built in)

MySQL 文档(我的主机的服务器是 v5.6)说您可以将用户级别的首选项放在 my.cnf 文件中,它们应该可以工作 - 我只是没有得到正确的语法吗?或者用户可能无法在共享服务器上为停用词设置用户级别的首选项?

标签: mysqlinnodbstop-wordsmybb

解决方案


甚至更好...

要逐个表创建停用词列表,请创建其他停用词表并使用 innodb_ft_user_stopword_table 选项指定要在创建全文索引之前使用的停用词表。

-- https://dev.mysql.com/doc/refman/5.6/en/fulltext-stopwords.html

SET SESSION sysvar_innodb_ft_user_stopword_table = ...如果您希望它在注销之前应用,请务必使用。见https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_ft_user_stopword_table

由于唯一的选择是GLOBALand SESSION,因此不能为 a DATABASEor 'user' 设置它。


推荐阅读