2012-08-26 48 views
1
1 MySQL 
2 PHP and MySQL 
3 PHP MySQL Database Search 

這些是我的表中的三行。在應用關鍵字'php mysql數據庫'的搜索時,應該從第3行開始按照3-2-1的順序顯示結果,因爲其中有3個關鍵字。根據字段中字數的MySQL相關搜索

我試過這個代碼,但它只顯示所有三個結果,但不是爲了我想要的。

SELECT data, 
MATCH(data) AGAINST('PHP MySQL Database' IN BOOLEAN MODE) AS score 
FROM table 
WHERE MATCH(data) AGAINST('PHP MySQL Database' IN BOOLEAN MODE) ORDER BY score DESC; 

回答

2

比較the docs for boolean modenatural language mode

布爾:布爾全文搜索具有以下特點: 它們不會按照相關性漸序行進行排序。

自然語言:當MATCH()WHERE子句中使用,如在前面的例子中,返回的行具有最高相關第一自動排序。

所以我的建議是使用自然語言模式,只是省略了顯式的排序條款。

注默認設置

引用上面鏈接的文檔:

一些詞在全文搜索被忽略:

任何字太短會被忽略。全文搜索找到的單詞的默認最小長度爲四個字符。

可以按照部分12.9.6, 「Fine-Tuning MySQL Full-Text Search「中所述更改默認最小字長和停用字列表」。

並從其中一個鏈接到頁面:

例如,如果你希望一個3字符的單詞變爲可搜索,則可以通過以下行的選項文件中設置的ft_min_word_len變量:

[mysqld] 
ft_min_word_len=3 
+0

出現此錯誤。 **找不到與列列表匹配的FULLTEXT索引** –

+0

好的,這可能暗示您最初的問題,您沒有在您正在搜索的列上有FULLTEXT索引; 'ALTER TABLE table ADD FULLTEXT(data);' –

+0

感謝您的幫助,此代碼工作得很好。我使用這個代碼SELECT數據,MATCH(數​​據)AGAINST('php mysql數據庫'在自然語言模式)AS得分從表WHERE MATCH(數​​據)反對('php mysql database'IN NATURAL LANGUAGE MODE); –