PHP/MySQL:匹配/反对转义停用词

PHP/MySQL: match / against escaping stopword

这是我的查询:

SELECT * from description WHERE (match(description) AGAINST ( '+will +smith' in boolean mode)) 

我知道 will 是一个停用词,这就是我得到空结果的原因。 如果我仍然可以将这两个词用于此查询,那将如何工作?我需要以某种方式逃避它吗?

没有办法“转义”给定搜索的停用词。这样想:在创建全文索引时,如果它们是停用词,它会跳过索引词。也就是说,单词不存储在全文索引中。因此,您随后无法在给定搜索中转义该词并让该词神奇地出现在全文索引中,因为创建索引时该词并未包括在内。

假设您在 InnoDB 中使用全文搜索,解决方案显然是定义您自己的 table 存储停用词。然后,您可以将一组自定义的单词放入 table,并使用配置变量 innodb_ft_server_stopword_table 使 MySQL 的实例在创建全文索引之前使用您的自定义 table .这样,您要编入索引的词将在构建全文索引时包含在内。

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

但这是一个全局变量,因此它将影响该 MySQL 实例上所有 table 的所有全文索引创建。我想您可以将 innodb_ft_server_stopword_table 设置为您的自定义 table,构建您的全文索引,然后将该选项设置回其通常的值。但这会很棘手,因为任何时候您重建全文索引(例如在更改 table 或优化 table 期间),它都会恢复为默认停用词。