2010-10-03 91 views
0

對於我創建的用戶內容網站,它有很多子部分:電影,工作,人員,照片,郵件等。它就像一個雅虎門戶網站,但非常非常詳細與信息搜索一樣,像每個主題一樣儘可能深入,不像任何網站。我有在密碼學php和mysql中開發的網站。搜索可以在所有子站點和每個子部分都是全球性的,就像我們在谷歌,雅虎上看到的那樣。在我的系統中有22個可能的用戶內容對象,每個對象都有大約12-15個搜索字段,我稱之爲對象元數據+ I,這是我想在搜索中包含的歷史數據(如用戶內容版本控制)。用戶內容全站搜索 - PHP/MySQL

現在的問題是爲每個子部分搜索它似乎是合理的,因爲範圍是有限的,所以我想我可以很好地使用mysql。我沒有預見到任何性能問題。但是,對於網站搜索,它不僅會搜索標題名稱,還會搜索關鍵字,標籤,描述,包括用戶的郵件,評論,歷史數據等。所以我擔心的是性能。由於這是一家初創公司,我的硬件資源有限,所以我必須100%依靠數據庫和代碼來實現它。

那麼從代碼和數據庫的角度來看,實施這樣一個搜索的最佳實踐是什麼?應該根據子站點來使用數據庫的混合?目前一切都存儲在1個mysql數據庫中。但是我發現問題可以很好地適用於人們搜索,電影搜索等,但是如果我包括郵件搜索,地理位置,歷史數據搜索,甚至不得不去搜索諸如照片標籤,照片描述等項目,的全局搜索可能會由於大量的連接和行數而導致性能問題。

回答

1

我不知道PHP,但對於我的ruby-on-rails項目,我總是使用Sphinx搜索引擎來做這樣的事情。它是一個獨立的搜索引擎,可以爲您的數據庫編制索引,並且當用戶提交搜索查詢時,查詢將與Sphinx的索引數據庫而不是實際的數據庫匹配。它非常快速,並且對如何進行索引/搜索提供了很好的控制。
Sphinx Search Engine
PHP: Sphinx Extension(不知道這是有關)

0

對於廣義的網站範圍內的搜索的預算,你可以限制只是您的域名各大搜索API中的一個,處理和顯示的結果,如果他們來了從你自己的搜索。

0

我完全沒有解決方案,但遇到了與我的開發中的網站類似的問題。

我開始認爲解決方案可能在於確定大部分搜索的位置,並將搜索限制在這些查詢中。如果用戶搜索需要更深入的結果(例如您的mail search, geo locations, historical data),那麼您可以將用戶發送給第二個mysql查詢。讓大多數用戶使用更簡單,低性能的查詢進行搜索,其餘的可以根據需要使用更多資源。

舉個例子,我網站的大部分用戶都會搜索新聞,日曆和媒體板塊,所以我的搜索看起來是第一個。但訪問者也可能正在搜索其他用戶,組,論壇帖子,標籤/類別等。但我會讓第二個更復雜的腳本處理它。