Mysql匹配查询不返回确切结果

时间:2012-11-26 19:16:14

标签: mysql

我们有以下查询:

SELECT video . * , u.name, u.username, p.avatar
FROM jos_hwdvidsvideos AS video
WHERE video.public_private = 'public'
AND MATCH (
    title, tags, description
)
AGAINST (
    'matthew:13-44-46'
)
AND video.published =1
AND video.approved = "yes"
LIMIT 0 , 30

唯一的问题是它会返回标题,标签或说明与matthew:13-44-46匹配的结果,但会返回其中包含matthew的内容。

1 个答案:

答案 0 :(得分:1)

正如Fine-Tuning MySQL Full-Text Search所述:

  

如果要更改被视为单词字符的字符集,可以通过多种方式执行此操作,如以下列表中所述。进行修改后,必须为包含任何FULLTEXT索引的每个表重建索引。假设您要将连字符('-')视为单词字符。使用以下方法之一:

     
      
  • 修改MySQL源代码:在storage/myisam/ftdefs.h中,请参阅true_word_char()misc_word_char()宏。将'-'添加到其中一个宏中并重新编译MySQL。

  •   
  • 修改字符集文件:这不需要重新编译。 true_word_char()宏使用“字符类型”表来区分字母和数字与其他字符。 。您可以在其中一个字符集XML文件中编辑<ctype><map>数组的内容,以指定'-'是“字母”。然后使用给定的FULLTEXT索引字符集。有关<ctype><map>数组格式的信息,请参阅Section 10.3.1, “Character Definition Arrays”

  •   
  • 为索引列使用的字符集添加新的排序规则,并更改列以使用该排序规则。有关添加归类的一般信息,请参阅Section 10.4, “Adding a Collation to a Character Set”。有关特定于全文索引的示例,请参阅Section 12.9.7, “Adding a Collation for Full-Text Indexing”

  •   

或者,您可以执行完全短语搜索IN BOOLEAN MODE

MATCH (title, tags, description) AGAINST ('"matthew:13-44-46"' IN BOOLEAN MODE)