2010-11-08 45 views
4

我读过使用全文搜索比使用LIKE %%更快。我已经更新了我的脚本,但它似乎总是有0个结果。MySQL全文搜索总是有0个结果?

SELECT *, 
MATCH(pages) AGAINST('doodle') AS score 
FROM books 
WHERE MATCH(pages) AGAINST('doodle') 
ORDER BY score DESC 

$关键字长度超过4个字符,我将页面列作为全文索引。我在“yankee doodle”格式的页面列中有“涂鸦”。

我也试过这种

SELECT *, 
MATCH(pages) AGAINST ('doodle' IN BOOLEAN MODE) AS score 
FROM books 
WHERE MATCH(pages) AGAINST ('doodle' IN BOOLEAN MODE)"; 

他们俩的作品:\

+0

您是否在“网页”列上有全文索引?你真的想在'pages'列中寻找'$ keyword'吗? – Xint0 2010-11-08 23:46:33

+0

你能举一个'$关键字'的例子吗? – 2010-11-08 23:48:38

+0

对不起。我已经更新了我的文章 – dark 2010-11-08 23:51:16

回答

13

全文搜索有一些奇怪的怪癖。

例如,在this page最后段落描述的行为可能是你的问题的原因:

....例如,虽然单词“MySQL”出现的每一行中前面所示的文章表,对于词的搜索没有结果:

mysql> SELECT * FROM articles 
    -> WHERE MATCH (title,body) AGAINST ('MySQL'); 
Empty set (0.00 sec) 

搜索结果是空的,因为单词“MySQL”是存在于所述行的至少50%。因此,它被有效地视为一个停止词。对于大型数据集,这是最理想的行为:自然语言查询不应该从1GB表中返回每隔一行。对于小数据集,可能不太理想。

这里的答案是添加更多行或使用布尔搜索。

如果需要加权搜索结果,请查看评论Posted by John Craig on December 16 2009 7:01pm链接页面上的解决方法,建议。

+0

请你能给我一个例子吗? – dark 2010-11-08 23:56:27

+1

@moo你的意思是布尔模式?看到这个页面,它有一个示例查询:http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html – 2010-11-09 09:05:55

+0

我知道这太晚了太晚评论这个,但我仍然面临这个问题就是今天。我将使用布尔模式,并且因为与结果没有关联,所以我会按照他们的分数对结果进行排序,如下所示:http://stackoverflow.com/a/3593438/632027 – Acute 2012-05-06 10:56:25