Mysql与特殊字符搜索的查询匹配

时间:2013-10-09 05:24:48

标签: php mysql

我对查询进行了以下匹配,根据搜索短语从数据库表中搜索记录。

    SELECT * FROM My_Table WHERE MATCH (catchall) AGAINST ('"horse"' IN BOOLEAN MODE)

此查询正常运行。当搜索短语包含特殊字符,如'('等它只是跳过这些特殊字符。 如果我搜索“(马)”,它给出了与“马”相同的结果。

    SELECT * FROM My_Table WHERE MATCH (catchall) AGAINST ('"(horse)"' IN BOOLEAN MODE)

这是否意味着匹配查询不适用于特殊字符或我错过了什么。请建议。谢谢。 我尝试从查询中删除IN BOOLEAN MODE但它不起作用。

1 个答案:

答案 0 :(得分:2)

来自the documentation

  

括号将单词组合成子表达式。括号内的组可以嵌套。

如果你想将prenthes视为“单词字符”,有两种可能性:

  

如果要更改被视为单词的字符集   字符,你可以通过两种方式实现。假设你想要对待   连字符(' - ')作为单词字符。使用其中任何一个   方法:

     

修改MySQL源:在myisam / ftdefs.h中,查看true_word_char()   和misc_word_char()宏。将' - '添加到其中一个宏和   重新编译MySQL。

     

修改字符集文件:这不需要重新编译。该   true_word_char()宏使用“字符类型”表来区分   来自其他角色的字母和数字。 。你可以编辑    要指定的一个字符集XML文件中的内容   ' - '是一个“字母。”然后使用给定的字符集   FULLTEXT索引。

     

进行修改后,必须重建每个索引   包含任何FULLTEXT索引的表。

第三种方法是根本不使用MATCH ... AGAINST并使用LIKE代替 - 但这可能会变得复杂(如果您想使用其他运算符的全文搜索,例如{ {1}} / +)并减慢查询速度。