2014-03-02 110 views
1

我已經使用了全文搜索功能,但它沒有達到預期的效果。 我在之後的search.php文件代碼:全文搜索功能不像預期的那樣工作

$kws = $_POST['kw']; 
$kws = mysql_real_escape_string($kws); 
$query = "SELECT * FROM products WHERE MATCH (product_name,brand,short_desc) 
      AGAINST ('*".$kws."*' IN BOOLEAN MODE) limit 14" ; 
$res_old = mysql_query($query); 

「千瓦」是什麼東西在我搜索框中輸入。現在舉一個例子,如果我搜索「Dove Intense」,它會將Dove Antihairfall放在最前面,因爲它在數據庫中處於頂端。 我知道我在兩個獨立的列(即品牌& product_name)上搜索全文功能,因此可能會發生這種情況。然而,無論如何,我可以反其道而行,這樣如果它與兩列匹配,它實際上會將搜索排在更高的位置。基本上用戶輸入的內容,我需要的東西在搜索結果中排名較高。 任何人都可以提出一些想法如何實現?

+0

看看這個。也許它會幫助你:http://www.sitepoint.com/forums/showthread.php?228853-how-do-I-rank-mysql-search-results-by-word-popularity – bestprogrammerintheworld

+0

他給了一個不同的方法來實現這一點,讓我看看我是否可以實現它。 –

回答

1

您(或他人)可能還是會喜歡的答案:

從MySQL文檔反對使用布爾模式匹配: 「他們不自動降低相關性順序排排序,你可以看到這前面的查詢結果爲:...「CheckThis

您應該使用布爾操作來實現您的期望,因此搜索'Dove Intense'將返回至少包含兩個單詞中的一個的行(即。rows with只有鴿子+行與強烈只+行與鴿子,激烈(以任何順序)),只是因爲沒有操作之間的兩個詞表示OR操作!

這可能不是您所期望的結果,因爲您可能有興趣在兩個單詞之間進行「和」操作,但是順序如何?

如果你不介意的順序(。即包含這兩個詞的任何行會被包括在結果前「強烈無論什麼鴿子......」),這意味着你應該對陣:

'+ Dove + Intense' 在此搜索中,只包含兩個世界中的一個的行將不會包含在結果中。

如果您試圖執行嚴格的搜索即。僅包含這個詞組行「鳩激烈」你應該對陣「‘鳩激烈的’」

現在關於排名:

如果你想獲得至少具有「鴿子」,但排名列更高的所有結果如果他們也包含「激烈」,那麼你應該匹配'+鴿子激烈'

希望這對你正在嘗試實施是有用的。

+0

如果發現兩個單詞都是按照頂部和後面一個單詞的順序排列,我們該如何排列結果? – mahen3d

相關問題