2012-02-27 119 views
1

我已經實現了一個數據庫,產品名稱,描述,類型等,並起初我生成一個查詢一個簡單的搜索代碼發送的productid(MySQL的主鍵),通過JSON到PHP實現在遠程服務器上。所以,現在我想實現一個搜索,用戶可以在搜索欄上插入多個單詞,並且查詢返回與單詞匹配的所有產品。例如,如果用戶搜索「綠色椅子」,我將查詢返回所有在字段顏色上具有綠色字詞的產品,並在字段產品中包含字詞主席。任何想法,我該如何執行這個?多個詞搜索欄

什麼是使用這樣的查詢的主要問題:

SELECT * , MATCH() AGAINST ('$search') AS points FROM productstb WHERE MATCH (PRODUCT,DESCRIPTION) AGAINST ('$search') ORDER BY points DESC LIMIT 50 

,我讀了它,當你用一個詞lonly這是真的產生問題?

解決:我用這個PHP文件來照顧一切,感謝所有的提示,他們非常usufull,我也嘗試過使用Lucene更快尤其是對於長期n個數據基地,但不幸的是,我不能決定移動到lucen DB

<?php 
mysql_connect("localhost","root","soltux"); 
mysql_select_db("baseDatosMobil"); 

$search = $_POST['precio']; 
$parts=explode(" ", $search); 
$number=count($parts); 

if ($number==1) { 
    $quer="SELECT ARTI,PRESENT,PRECBOL,PROV,CODART FROM PRODFAR WHERE ARTI LIKE '%$busqueda%' LIMIT 10"; 
} 
elseif ($number>1) { 
    $quer= "SELECT ARTI, PRESENT, PROV,CODART, PRECBOL, MATCH (ARTI, PRESENT, PROV) AGAINST ('+$search') AS Score FROM PRODFAR WHERE MATCH (ARTI, PRESENT, PROV) AGAINST ('+$search') ORDER BY Score DESC LIMIT 10"; 

} 
$q=mysql_query($quer); 
while($e=mysql_fetch_assoc($q)){ 
    $e['ARTI']=utf8_encode($e['ARTI']); 
    $e['PRESENT']=utf8_encode($e['PRESENT']); 
    $e['PROV']=utf8_encode($e['PROV']); 
    $output[]=$e; 
} 
print(json_encode($output)); 
mysql_close(); 

?> 

回答

0

當然這取決於DB計劃,但當然你要保持像一些索引表「搜索詞 - >產品」和更新它,當你做一些你的商品清單。當用戶輸入兩個或多個單詞時,簡單查詢每個鍵的DB並計算DB答案的交集。

然後,你還可以添加另一個字段索引表中顯示的每個項目的「神似」,這樣你就可以通過它來進行排序 - 從而用戶將看到「更常見的項目」第一。

2

如果你想允許全文搜索你需要實現一些指標。一個簡單的fieldname like "%$term%%"不會很高性能,Mysql不是很擅長全文搜索。我建議爲此使用Lucene

+0

或使用斯芬克斯:http://sphinxsearch.com/ – Stefan 2012-02-27 14:54:52

+0

但問題是,最終客戶需要這個解決方案,我不得不賣掉以後,使用MySQLm。也會更好,因爲lucene更開放 – 2012-02-27 15:57:41