2011-02-24 28 views
0

我正在製作一個包含許多不同部分的社交網站,例如博客,畫廊,多媒體等。現在是實現搜索功能的時候了。客戶拒絕使用谷歌搜索,並堅持自定義一個,其中每個部分將單獨顯示結果。進行自定義網站搜索的方法

例如,如果用戶輸入「藝術」,其結果應顯示是這樣的:

3 found in blogs 
1 ... 
2 ... 
3 ... 

2 found in galleries 
1 ... 
2 ... 

None found in multimedia 

我打算使用這個MySQL全文搜索。所以,問題是:我如何進行這樣的搜索,所以如果很多記錄匹配查詢,它不會殺死服務器?在這種情況下,我真的不知道如何實現分頁。

回答

4

我強烈建議不要使用MySQL進行全文搜索,它在索引創建和執行搜索時都很慢。

看看SphinxLucene,它們都比MySQL快得多,並且很容易綁定到PHP應用程序。

1

也許更好的決定是使用 - sphinx

+0

絕對可擴展性更強,但可能並不容易 – Piskvor 2011-02-24 12:30:46

+0

安裝和配置非常簡單,而且文檔很好 – azat 2011-02-24 12:40:50

1

我在一些網站我創造這樣做過。我所做的是對每個模塊運行一個查詢來查找結果。你想要做的是運行一個MySQL查詢,然後在while循環中獲取行,而不是使用全部獲取。這將確保你不會消耗內存。例如:

例如: while($ row = mysql_fetch_array($ result)){echo $ row ['item_name']; }

您很可能會發現MySQL可以處理比您想象的更大的搜索。

分頁最好用分頁類來完成,就像來自代碼點火器之類的分頁類一樣。 您使用網頁框架工作嗎?

2

即使您的應用程序非常龐大(我們在這裏討論的數千次查詢/秒),您也不會殺死一臺具有這種功能的mysql服務器,您只需要設置專門用於搜索的mysql服務器的複製,你可能想建立一個「流行的關鍵字結果」的緩存,以加快一點東西,但家電喜歡googlemini仍然是最好的...

1

是獅身人面像或Lucene,兩者都很好,明顯快於MySQL並且很容易綁定到PHP應用程序。

2

如果您可以運行Java servlet容器(如Tomcat或Jetty),那麼我推薦Solr(http://lucene.apache.org/solr/)。它位於Lucene之上,功能非常強大。 Solr開始於CNET,並被Netflix和Zappos等大型網站使用。 Stack Overflow使用Lucene的.NET實現。我對獅身人面像不熟悉,所以我不能告訴你它與Solr相比如何。

如果您使用Solr,請查看面。這使您可以執行搜索,然後得到的多少文件名中的「博客」的計數,「畫廊」,「多媒體」等

這裏是一個PHP客戶端使用Solr(http://code.google.com/p/solr-php-client/)接口。

相關問題