我有以下匹配的查询,从数据库表中搜索记录,基于搜索短语。
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布尔模式,但它没有工作。
发布于 2013-10-09 05:33:57
来自文献资料
括号将单词分组为子表达式。括号内的组可以嵌套。
如果你想把婚前协议当作“单词字符”,有两种可能性:
如果要更改被认为是字字符的字符集,可以通过两种方式进行更改。假设您希望将连字符('-')视为单词字符。使用以下任何一种方法: 修改MySQL源代码:在myisam/ftdefs.h中,请参阅true_word_char()和misc_word_char()宏。将“-”添加到其中一个宏中并重新编译MySQL。 修改字符集文件:这不需要重新编译。true_word_char()宏使用“字符类型”表来区分字母和数字与其他字符。。您可以编辑一个字符集XML文件中的内容,以指定'-‘是一个“字母”。然后使用给定的字符集作为全文索引。 修改后,必须为每个包含任何全文索引的表重新生成索引。
第三种方法是根本不使用MATCH ... AGAINST,而是使用LIKE --但这可能会变得复杂(如果您想使用+/-之类的满文本搜索的其他操作符),并放慢查询的速度。
https://stackoverflow.com/questions/19263777
复制相似问题