我想在我的数据库中使用全文索引的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使用该表的唯一方法是,如果我在单个查询中输入以下行 - 它有效,但仅适用于SESSION。
set session innodb_ft_user_stopword_table='database/mybb_stopwords';
alter table mybb_posts engine=innodb;
alter table mybb_threads engine=innodb;
会话结束后,它将恢复为使用全局服务器停用词列表...
接下来,我在用户级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 文件中,它们应该可以工作 - 我只是语法不正确吗?或者,也许用户无法在共享服务器上为非索引字设置用户级首选项?
甚至更好...
若要逐个表创建非索引字列表,请创建其他非索引字表,并使用 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
由于唯一的选择是GLOBAL
和SESSION
,因此不能为DATABASE
或"用户"设置它。