我正在嘗試爲我正在創建的網站編寫一個預測搜索系統。爲網站創建智能預測搜索
完成的功能也會有很多這樣的:
我不知道要做到這一點的最好辦法,但這裏是我到目前爲止有:
搜索表:
id-term-count
每次搜索時都會插入到搜索表中。
當用戶輸入一個字符到搜索輸入,將發生以下情況:
- 頁面使得一個AJAX請求到搜索PHP文件
- 的PHP文件連接到MySQL數據庫和執行查詢:
SELECT * FROM searches WHERE term LIKE 'x%' AND count >= 10 ORDER BY count DESC LIMIT 10
(X =文本中搜索輸入) - 基於過去搜索標準的10個頂部結果隨後的頁面
這個解決方案還很不完善。如果任何隨機的人搜索相同的詞10次,它將顯示爲推薦的搜索(如果有人在哪裏搜索以相同字符開頭的詞)。我的意思是,如果有人搜索了「poo poo」10次,然後網站上的某個人搜索了「po」尋找土豆,他們會將「poo poo」視爲熱門搜索。 這不太酷。
有一些想法可以解決這個問題。例如,我可以將每個插入查詢限制在搜索表中以限制用戶的IP地址。但是,這並不能完全解決問題,如果用戶有動態IP地址,他們可以重新啓動調制解調器,並在每個IP地址上執行10次搜索。當然,它必須輸入的次數可以保持祕密,因此它更安全一些。
我想另一種解決方案是添加一個黑名單來刪除像「poo poo」這樣的詞出現。
我的問題是,有沒有更好的方法做到這一點,或者我沿着正確的路線移動?我想寫代碼,這將允許這個擴大。
感謝
一個建議是不要進行AJAX調用,除非文本框中有一定數量的字符。我喜歡數字3.另外,除非mysql在varchar列上支持不區分大小寫的查詢,否則請考慮切換到sql server。或者將所有內容以小寫形式存儲,並在使用前將搜索參數轉換爲小寫形式。 –
@DanBracuk這些改進當然是我還沒有想到的好東西。謝謝! – jskidd3