2012-11-26 21 views
0

我们有以下查询:Mysql的对阵查询没有返回确切resutls

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

由于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”

或者,您也可以执行精确的短语SEACH IN BOOLEAN MODE

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

谢谢......我累了IN BOOLEAN MODE和它的工作! – fishnet786