2015-02-11 50 views
-1

我一直在爲我的網站開展實時搜索功能。我收集了一些表值(即樂隊,流派,專輯等),並將它們放在它們各自的表格中,以及用於索引的搜索表格。我的主要問題是如何讓它更準確。如何在PHP中進行更精確的實時搜索

這是我的MySQL查詢(注意:結果是相同的有或沒有說明):

$search = " 
    (SELECT * FROM `search` 
    WHERE `search_name` LIKE '%$search_term%' 
    ORDER BY '%$search_term%' DESC 
    LIMIT 0, 8)"; 

這裏是數據庫的一個示例:

Search ID | Search Name      | Type | 
---------------------------------------------------------- 
8   | Big Deal (What's He Done Lately?) | Album | 
12  | Henry's Funeral Shoe    | Band | 

問題是,是當我輸入H進入搜索參數時,我預計亨利的殯葬鞋將在頂部,但相反我得到大交易(他最近做了什麼?)之前,因爲它包含H,並且在更合適的之前進行搜索。

所以我的問題:是否有一個MySQL函數,可以通過表格排序,找到最相關的結果,並權衡他們對那些不太相關?

回答

1

基本搜索很容易。好的搜索很難。

設置搜索時,您需要了解數據以及用戶將要搜索的內容。在你的情況下,你希望項目首先返回(我假設)。

MySQL不是一般搜索的最佳平臺,但您可以做的是2搜索。第一個是:

search_name LIKE '$search_term%' 

請注意在搜索項前缺少的%。這些結果是排名較高的結果。

其次,你應該使用:

search_name LIKE '%$search_term%' 

這些是你的排名較低的結果。任何也位於較高級別列表中的結果都應該從排名較低的列表中刪除。

最後,你應該結合結果集,確保不會偶然混淆行列。

雖然不完美也無法調整,但這可能有助於在基本搜索領域。

+0

謝謝,這導致我'GROUP BY search_name',然後'ORDER BY CASE'使用你的建議。 – 2015-02-11 01:23:36