English 中文(简体)
处理MySQL全文特殊字符
原标题:
  • 时间:2008-11-14 16:10:39
  •  标签:

在使用MySQL全文搜索的布尔模式下,存在某些像+和-这样的字符被用作运算符。如果我搜索"C++"类似这样的东西,它会把+解释为运算符。如何处理这些特殊字符是最佳实践? 使用MySQL全文搜索的布尔模式时,有一些像+和-这样的特殊字符被用作运算符。如果搜索包含这些特殊字符的查询词,可能会影响查询结果。因此,有几种处理这些特殊字符的最佳实践: 1.使用转义字符:在查询字符前加上反斜杠(\),以将其视为普通字符,例如:SELECT * FROM table WHERE MATCH (column) AGAINST ('C\+\+' IN BOOLEAN MODE) 2.使用引号:将包含特殊字符的查询词用引号括起来,例如:SELECT * FROM table WHERE MATCH (column) AGAINST ('"C++"' IN BOOLEAN MODE) 3.禁用特殊字符:可以通过修改MySQL的配置文件禁用特殊字符,例如:将ft_min_word_len参数设置为0,禁用所有特殊字符。 在处理特殊字符时,应根据实际情况选择最合适的方法,以确保搜索结果的准确性和完整性。

我目前使用的方法是将数据中的所有+字符转换为_plus。它还将&,@,/和#字符转换为文本表示。

问题回答

使用MySQL的全文检索,没有很好的方法来做到这一点。你正在做的(用预定义的字符串替换特殊字符)是唯一的方法来做到这一点。

您可能希望考虑使用Sphinx搜索。它显然支持转义特殊字符,并且根据所有报告,其全文搜索速度显着快于默认速度。

MySQL在构建全文索引时忽略的标记相当残酷。我想如果它遇到术语"C++",它可能会删除加号字符,只留下C,然后忽略它,因为它太短了。您可能可以配置MySQL以包括单字母单词,但它并不是针对此进行优化的,我怀疑您是否可以使其按您的要求处理加号字符。

如果您需要一个好的内部搜索引擎,可以配置一些类似的东西,请查看已经移植到各种语言(包括PHP(在Zend框架中))的Lucene。

如果您需要这个更多地标记而不是文本搜索,那么其他的东西可能更为合适。





相关问题
热门标签