2013-05-08 59 views
3

我完全被這一個困惑。MYSQL MATCH ...對於沒有結果返回

我目前正在一個電子商務網站上工作,並且有一張滿載測試產品的表格。在這個表中是一個名爲'name'的字段,它是TEXT類型並且具有FULLTEXT索引。

我插入了幾百行虛擬數據,每一行都插入了「測試產品」(不帶引號),因爲它是'name'字段中的值。

但是,即使單詞'product'當前位於每行的名稱字段中,運行以下命令也會返回零結果。

從那裏MATCH(名)反對(「產品」)

我已經檢查了服務器變量產品 SELECT名字,一切都被設置爲默認值。最小字符是4,停用詞是默認等。據我所知,產品不是停用詞。

如果有任何進一步的信息可以幫助我找到解決方案,請告訴我。

非常感謝提前。

+0

'SELECT名稱FROM產品WHERE名稱LIKE「%產品%」'? – phpisuber01 2013-05-08 13:37:22

+1

我認爲所有行都通用的字符串被認爲是「太常見」,因此被忽略。 – hjpotter92 2013-05-08 13:39:44

+0

我使用MATCH ... AGAINST的原因是,我可以建立一個強大的搜索引擎,搜索每個產品的名稱和說明,最終以便我可以按最相關的順序排列它們。 LIKE在任何接近相同結果的地方都無法實現,因爲它不會根據匹配有多接近來排序結果,它只是返回具有相等相關性的所有內容。 感謝您的迴應! – 2013-05-08 13:40:13

回答

5

MySQL documentation on Fulltext searches開始,由於相關字符串出現在所有行中,因此您的搜索查詢被認爲是觸發了一個停用詞。

的50%閾值有顯著含義,當你第一次嘗試 全文搜索,看看它是如何工作的:如果你創建了一個表 插入只有一兩行文字進去,每一個字文本 發生在至少50%的行中。因此,沒有搜索返回任何 結果。一定要插入至少三行,最好多插入多個。誰需要繞過50%的限制,可以使用布爾 搜索模式

這裏用戶來說是一個鏈接,指的Boolean Full-Text Searches

+0

感謝您的快速響應。這是我的問題的答案! 這很有趣,我一直在使用匹配...反對多年,從來沒有來過這個問題! 再次感謝您的幫助。 – 2013-05-08 13:49:20

+0

我有一個只有一行的表(測試數據)相同的問題。 MATCH()AGAINST()子句返回零結果,即使該字段包含該單詞。在添加兩個包含不同文本的行之後,搜索工作正常。感謝澄清。 – 2016-11-27 04:04:47