2011-09-01 96 views
2

我有一個要求,添加搜索功能到我正在建設的網站,並想知道是否有人做過類似的事情。我的網站的搜索功能

我有一個包含這種格式的貓細節的示例表:

Name, place, type, age, gender and size. 

我只有一個搜索框,用戶可以輸入自己的搜索詞。我的問題是,如果有人輸入「巴黎貓」,我該如何搜索表格? 我希望能夠搜索所有的字段,並返回一些東西,如果找到。

有沒有什麼辦法可以達到這個目的,而不是有很多方框讓他們選擇一個搜索條件?任何幫助或建議,將不勝感激。

+0

我不認爲你應該搜索*所有*字段。在「性別」中搜索「巴黎貓」並不適合。我懷疑搜索「男性」是否合適。 – adlawson

+0

這真的取決於你想要搜索功能的「Google like」。處理「在巴黎的貓」實際上並不是微不足道的,除非某些字段字面上包含「巴黎貓」或其它相似的東西。尋找數據庫中字面上存在的值並不難,試圖讓模糊甚至「智能」搜索成爲可能。 – deceze

回答

4

在這種情況下工作得很好的一種更簡單的方法是在mysql中進行全文搜索。你可以讓它索引所有的列和自然語言搜索。

如果你有一個MySQL表稱爲貓與下面的模式:

mysql> desc cats; 
+--------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+--------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(100) | YES | MUL | NULL |    | 
| place | varchar(100) | YES |  | NULL |    | 
| type | varchar(100) | YES |  | NULL |    | 
| age | int(11)  | YES |  | NULL |    | 
| gender | varchar(100) | YES |  | NULL |    | 
| size | varchar(100) | YES |  | NULL |    | 
+--------+--------------+------+-----+---------+----------------+ 

您可以運行下面的SQL創建索引:

CREATE FULLTEXT INDEX cats_search ON cats (name, type, place, gender); 

然後,當你搜索字符串「男性虎斑在巴黎'你可以用這個SQL搜索表格:

SELECT * 
    , MATCH(name, type, place, gender) 
     AGAINST ('male tabby in paris' IN BOOLEAN MODE) relevance 
FROM cats 
WHERE MATCH(name, type, place, gender) 
     AGAINST ('male tabby in paris' IN BOOLEAN MODE) 
ORDER BY relevance DESC; 

將返回一個與mysql中決定的順序相匹配的行中有11行是最相關的。

你將不得不研究mysql全文搜索來按照你想要的方式微調結果,但是這應該會讓你離開現實。

+0

非常感謝。我會探索這個選項,看看它在哪裏。 –