如何解决PHP/MySQL:匹配/反对转义停用词
这是我的查询:
late
我知道 SELECT * from description WHERE (match(description) AGAINST ( '+will +smith' in boolean mode))
是一个停用词,这就是我得到空结果的原因。
我仍然可以在此查询中使用这两个词,这将如何运作?我需要以某种方式逃避它吗?
解决方法
没有办法为给定的搜索“转义”停用词。可以这样想:在创建全文索引时,如果它们是停用词,它会跳过索引词。也就是说,单词不存储在全文索引中。因此,您无法随后在给定的搜索中对单词进行转义,并且无法在全文索引中神奇地出现一个单词,因为在创建索引时未包含该单词。
假设您在 InnoDB 中使用全文搜索,解决方案显然是定义您自己的存储停用词的表。然后,您可以将一组自定义的单词放入表中,并在创建全文索引之前使用配置变量 innodb_ft_server_stopword_table
使您的 MySQL 实例使用您的自定义表。这样,您要编入索引的单词将在构建全文索引时被包括在内。
见https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html
但这是一个全局变量,因此它会影响该 MySQL 实例上所有表上的所有全文索引创建。我想您可以将 innodb_ft_server_stopword_table
设置为您的自定义表,构建您的全文索引,然后将该选项设置回其通常的值。但这会很棘手,因为无论何时重建全文索引(例如在更改表或优化表期间),它都会恢复为默认停用词。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。