2011-05-06 49 views
1

這個查詢有什麼問題嗎?這個有時有時候,有時候不會。例如,用'七'這個詞它沒有返回任何分數,但我知道它出現在29行至少在體內,然而它返回爲分數0.反對不返回分數

換句話說它工作正常,但沒有這個。任何人都知道爲什麼或有不同的解決方案按相關性排序?

SELECT *, 
     ((MATCH(articles.name) AGAINST('seven'))*5 + 
      (MATCH(articles.subtitle) AGAINST('seven'))*3 + 
      (MATCH(articles.body) AGAINST('seven'))) AS search_score 
    FROM articles 
LEFT JOIN matches ON articles.match=matches.id 
ORDER BY search_score DESC 

編輯:我注意到'七'是一個停止詞。還有其他方法可以做到這一點? stopwords

+0

你檢查每一個單獨? SQL不能很好地添加NULL ... – 2011-05-06 18:53:08

回答

0

在每個分數週圍添加COALESCE(值爲0)。

+0

我更新了問題。 – 2011-05-06 18:57:09

0

問題
如果單詞是太常見,即,發生在50%+的行中,MySQL認爲它是一個STOP-字和將不匹配反對。
然後是停止詞列表(你已經注意到)
參見:http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

解決方案
這樣的回答:where to edit mysql fulltext stopword lists?
告訴您如何重寫/替換默認停止字名單。

這裏的鏈接到MySQL的文檔頁面:http://dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html

+0

在這種情況下禁用它們不是一個選項。 – 2011-05-06 19:29:17

+0

@Sein Kraft,如果您不能更改停用詞表,那麼就「匹配」而言,我認爲您運氣不佳。 – Johan 2011-05-06 20:30:13