2013-10-24 39 views
0

我正在嘗試爲我正在創建的網站編寫一個預測搜索系統。爲網站創建智能預測搜索

完成的功能也會有很多這樣的:

enter image description here

我不知道要做到這一點的最好辦法,但這裏是我到目前爲止有:

搜索表:
id-term-count

每次搜索時都會插入到搜索表中。


當用戶輸入一個字符到搜索輸入,將發生以下情況:

  1. 頁面使得一個AJAX請求到搜索PHP文件
  2. 的PHP文件連接到MySQL數據庫和執行查詢:SELECT * FROM searches WHERE term LIKE 'x%' AND count >= 10 ORDER BY count DESC LIMIT 10(X =文本中搜索輸入)
  3. 基於過去搜索標準的10個頂部結果隨後的頁面
上列出

這個解決方案還很不完善。如果任何隨機的人搜索相同的詞10次,它將顯示爲推薦的搜索(如果有人在哪裏搜索以相同字符開頭的詞)。我的意思是,如果有人搜索了「poo poo」10次,然後網站上的某個人搜索了「po」尋找土豆,他們會將「poo poo」視爲熱門搜索。 這不太酷

有一些想法可以解決這個問題。例如,我可以將每個插入查詢限制在搜索表中以限制用戶的IP地址。但是,這並不能完全解決問題,如果用戶有動態IP地址,他們可以重新啓動調制解調器,並在每個IP地址上執行10次搜索。當然,它必須輸入的次數可以保持祕密,因此它更安全一些。

我想另一種解決方案是添加一個黑名單來刪除像「poo poo」這樣的詞出現。

我的問題是,有沒有更好的方法做到這一點,或者我沿着正確的路線移動?我想寫代碼,這將允許這個擴大。

感謝

+0

一個建議是不要進行AJAX調用,除非文本框中有一定數量的字符。我喜歡數字3.另外,除非mysql在varchar列上支持不區分大小寫的查詢,否則請考慮切換到sql server。或者將所有內容以小寫形式存儲,並在使用前將搜索參數轉換爲小寫形式。 –

+0

@DanBracuk這些改進當然是我還沒有想到的好東西。謝謝! – jskidd3

回答

2

你是在正確的軌道上。

我會怎麼做:

  1. 您存儲的每個查詢唯一。添加一個表格,用於跟蹤該搜索項的每個IP,並且每個IP只更新一次您的計數。
  2. 如果某個新的/唯一的關鍵字在X時間段內超過X次,則讓您的系統向您/管理員發送郵件您有機會手動將關鍵字列入黑名單。這必須是手動的,因爲一些熱門話題可能也會顯示這種行爲。
  3. 這是最有趣的一個:查詢完成後,檢查結果的數量。建議沒有結果的關鍵字是毫無意義的。所以只建議至少會給出X個結果的查詢。諸如「poo poo」之類的查詢將不會給出結果,因此它們不會顯示在您的建議列表中。

我希望這會有所幫助。如果您有任何問題,請進一步與我聊天:)

0

例如,你可以添加一個名爲驗證一個新的布爾列,並避免使用黑名單。如果驗證爲false,則不會出現在推薦列表中

此字段可由管理員(通過查詢或後臺工具)手動進行調整。您可以添加另一個名爲audit的列,該列存儲查詢的時間戳。如果最大時間戳和最小時間戳之間的差值超過某個值,則默認情況下,驗證字段可能爲false。

這個解決方案很容易和快速的發展你的想法。

關心和祝你好運。