【问题标题】:How to disable or change MySQL Fulltext stopwords for single user on SHARED server?如何禁用或更改共享服务器上单个用户的 MySQL 全文停用词?
【发布时间】:2019-11-29 09:03:12
【问题描述】:

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

关于如何禁用停用词或将默认服务器内置列表更改为自己的表的所有说明,都需要使用 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 文件中,它们应该可以工作 - 我只是语法不正确吗?或者用户无法在共享服务器上为停用词设置用户级首选项?

【问题讨论】:

    标签: mysql innodb stop-words mybb


    【解决方案1】:

    更好...

    要逐个表创建停用词列表,请创建其他停用词表并使用 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

    由于唯一的选择是GLOBALSESSION,因此不能为DATABASE 或“用户”设置。

    【讨论】:

    • 是的,我试过了,但我无法执行“设置全球...”,因为我只是共享服务器上的用户...因此我的问题是,如何将停用词设置为共享服务器上的单个用户-我没有权限/访问权限来重新启动服务器或设置全局变量....相同的 dev.mysql.com 文档说可以通过用户级别设置用户首选项my.cnf 文件...但实际上没有任何效果。那么我在 my.cnf 文件中是否有语法错误,或者......是否根本不可能为用户设置停用词......我无法得到任何持续时间超过无用的“会话”的东西。提前致谢。
    • 建议通过 bugs.mysql.com 填写“功能请求”。
    • 停用词是 MySQL 不搜索的词,因为它们很常见。但基本上,停用词列表是英文的……为了处理语言问题和共享服务器的问题,一个基本的选择是创建自己的停用词表。当用户输入他正在搜索的句子时,只需从该句子中删除您的停用词表中的所有单词,然后使用仍在该句子中的单词执行搜索。
    • 即有两列文本:一列用于显示,一列用于索引。
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 2014-11-07
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多