2012-06-28 67 views
1

我想爲所有內容(或至少可搜索的內容)要存儲在數據庫中的網站構建站點範圍的搜索。我可以想到的最好的方式做到這一點,而沒有得到極大的參與如下:基本的網站搜索方法?

  1. 用戶輸入搜索查詢 - 「棕色皮革沙發」。
  2. 將查詢拆分爲數組。
  3. 使用LIKE%$ val%爲數組的每一行搜索數據庫(mysql)。
  4. 將結果加載到一個數組中,然後給出每個結果+1點的內容中找到的搜索項數。
  5. 如果結果具有匹配的詞條數量,則按特定頁面的視圖數量排序 - 這是受歡迎程度的指標。

實現諸如爲頁面標題中的搜索詞賦予更多結果價值或允許用戶通過使用引號搜索多詞短語等,不會太複雜。除了性能方面的考慮 - 返回的限制結果,緩存等,還有什麼我需要考慮的或更好的方法來處理(除了實現Google搜索框)?

+0

你看過搜索服務器,像[獅身人面像](http://sphinxsearch.com/)? – ESG

回答

1

不知道什麼是極端參與的閾值,但我可能會首先搜索包含整個字符串數組的匹配,然後調用您描述的方法。

考慮:將作爲單獨結果返回的兩段內容。

結果1:

____ brown ____ ____ _____ ____ brown ____ ____ ______ ___ brown _____ ____ brown 

結果2:

brown leather sofas _____ _____ ______ ____ _____. 

顯然,我們希望回到結果2作爲頂級的結果,但是你的方法將分配更多的 「點」,導致1。

+0

很好的觀察,謝謝。一定要給那些完全符合這個詞組的實例賦予更多的權重,然後將那些詞彙最接近的實例等等放在一起。說實話,這可能是一個非常有趣的練習。 :) – Anonymous

0

您考慮過Full Text Searching嗎?這不適合所有情況,但可以幫助解決這類問題。

SELECT * 
FROM articles 
WHERE MATCH (title, body) 
AGAINST ('database' IN NATURAL LANGUAGE MODE); 

請務必閱讀docs不過,因爲有獲得新的用戶,例如一些有趣的陷阱:

如果你創建了一個表只插入一行或兩行文本的成它,文本中的每個單詞至少在50%的行中出現。因此,沒有搜索返回任何結果。一定要插入至少三行,最好多插入一行。