我们有以下查询:
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
的结果
如微调MySQL全文搜索:中所述
如果要更改被视为单词字符的字符集,可以通过以下列表中所述的多种方式进行更改。修改后,必须为包含任何
FULLTEXT
索引的每个表重新生成索引。假设您要将连字符('-'
)视为一个单词字符。使用以下方法之一:
修改MySQL源代码:在
storage/myisam/ftdefs.h
中,请参阅true_word_char()
和misc_word_char()
宏。将'-'
添加到其中一个宏中并重新编译MySQL。修改字符集文件:这不需要重新编译。
true_word_char()
宏使用"字符类型"表将字母和数字与其他字符区分开来。您可以在其中一个字符集XML文件中编辑<ctype><map>
数组的内容,以指定'-'
是一个"字母"。然后将给定的字符集用于FULLTEXT
索引。有关<ctype><map>
阵列格式的信息,请参阅第10.3.1节"字符定义阵列"。为索引列使用的字符集添加新的排序规则,并更改列以使用该排序规则。有关添加排序规则的一般信息,请参阅第10.4节"向字符集添加排序规则"。有关全文索引的具体示例,请参阅第12.9.7节"为全文索引添加排序规则"。
或者,您可以执行一个精确的短语seachIN BOOLEAN MODE
:
MATCH (title, tags, description) AGAINST ('"matthew:13-44-46"' IN BOOLEAN MODE)