2010-11-08 91 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