我有一個要求,添加搜索功能到我正在建設的網站,並想知道是否有人做過類似的事情。我的網站的搜索功能
我有一個包含這種格式的貓細節的示例表:
Name, place, type, age, gender and size.
我只有一個搜索框,用戶可以輸入自己的搜索詞。我的問題是,如果有人輸入「巴黎貓」,我該如何搜索表格? 我希望能夠搜索所有的字段,並返回一些東西,如果找到。
有沒有什麼辦法可以達到這個目的,而不是有很多方框讓他們選擇一個搜索條件?任何幫助或建議,將不勝感激。
我有一個要求,添加搜索功能到我正在建設的網站,並想知道是否有人做過類似的事情。我的網站的搜索功能
我有一個包含這種格式的貓細節的示例表:
Name, place, type, age, gender and size.
我只有一個搜索框,用戶可以輸入自己的搜索詞。我的問題是,如果有人輸入「巴黎貓」,我該如何搜索表格? 我希望能夠搜索所有的字段,並返回一些東西,如果找到。
有沒有什麼辦法可以達到這個目的,而不是有很多方框讓他們選擇一個搜索條件?任何幫助或建議,將不勝感激。
在這種情況下工作得很好的一種更簡單的方法是在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全文搜索來按照你想要的方式微調結果,但是這應該會讓你離開現實。
非常感謝。我會探索這個選項,看看它在哪裏。 –
我不認爲你應該搜索*所有*字段。在「性別」中搜索「巴黎貓」並不適合。我懷疑搜索「男性」是否合適。 – adlawson
這真的取決於你想要搜索功能的「Google like」。處理「在巴黎的貓」實際上並不是微不足道的,除非某些字段字面上包含「巴黎貓」或其它相似的東西。尋找數據庫中字面上存在的值並不難,試圖讓模糊甚至「智能」搜索成爲可能。 – deceze