2

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

    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 但它不起作用。

4

1 回答 1

2

文档

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

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

如果要更改被视为单词字符的字符集,可以通过两种方式进行。假设您要将连字符 ('-') 视为单词字符。使用以下任一方法:

修改 MySQL 源代码:在 myisam/ftdefs.h 中,查看 true_word_char() 和 misc_word_char() 宏。将“-”添加到这些宏之一并重新编译 MySQL。

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

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

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

于 2013-10-09T05:33:57.577 回答