当前位置:  开发笔记 > 后端 > 正文

你如何得到你的全文布尔搜索来获取术语C++?

如何解决《你如何得到你的全文布尔搜索来获取术语C++?》经验,为你挑选了1个好方法。

所以,我需要找出如何在MySQL数据库上进行全文布尔搜索,以返回包含术语"C++"的记录.

我有我的SQL搜索字符串:

SELECT * 
FROM mytable 
WHERE MATCH (field1, field2, field3) 
AGAINST ("C++" IN BOOLEAN MODE) 

虽然我的所有字段都包含字符串C++,但它永远不会在搜索结果中返回.

如何修改MySQL以适应这种情况?可能吗?

我找到的唯一解决方案是在输入我的数据的过程中转义+字符,如"__plus",然后修改我的搜索以适应,但这似乎很麻烦,必须有一个更好的方法.



1> bobince..:

如何修改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设置为空字符串来删除停止列表,因为在此处拾取所有内容也是不切实际的.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有