我如何修改 MySQL 以适应这种情况?
你必须改变 MySQL 关于单词是什么的概念。
首先,默认的最小字长为 4。这意味着任何仅包含 <4 个字母的单词的搜索词都不会匹配,无论是“C++”还是“cpp”。您可以使用ft_min_word_len配置选项进行配置,例如。在你的 my.cfg 中:
[mysqld]
ft_min_word_len=3
(然后停止/启动 MySQLd 并重建全文索引。)
其次,'+' 不被 MySQL 视为字母。您可以将其设为字母,但这意味着您将无法在字符串 'fish+chips' 中搜索单词 'fish',因此需要注意。而且这不是微不足道的:它需要重新编译 MySQL 或破解现有的字符集。请参阅文档第 11.8.6 节中以“如果要更改被视为单词字符的字符集...”开头的部分。
在将我的数据输入为“__plus”之类的过程中转义 + 字符,然后修改我的搜索以适应
是的,这样的事情是一个常见的解决方案:您可以将您的“真实”数据(没有转义)保存在一个主要的、确定的表中——通常使用 InnoDB 来满足 ACID 合规性。然后可以添加一个辅助 MyISAM 表,其中仅包含用于全文搜索诱饵的损坏词。您还可以使用这种方法进行有限形式的词干提取。
另一种可能性是检测 MySQL 无法执行的搜索,例如只有短词或不寻常字符的搜索,然后回退到仅对这些搜索进行简单但缓慢的 LIKE 或 REGEXP 搜索。在这种情况下,您可能还希望通过将ft_stopword_file设置为空字符串来删除停止列表,因为将其中的所有内容都作为特殊内容也是不切实际的。