2008-08-29 149 views
54

我想爲網站實現搜索功能(假設它與SO相似)。我不想使用谷歌搜索那樣的東西。如何在網站中實現搜索功能?

我的問題是:

如何實現這一點?

有兩種方法,我所知道的:

  1. 搜索中的所有應用程序數據庫,當用戶給他的查詢。
  2. 將我擁有的所有數據索引並存儲到其他地方並從那裏查詢(如Google所做的那樣)。

誰能告訴我哪條路要走?優缺點都有什麼?

更好,有沒有更好的方法來做到這一點?

回答

33

利用Lucene,
http://lucene.apache.org/java/docs/

Apache Lucene是一個高性能,全功能的文本搜索引擎完全用Java編寫庫。它幾乎適用於任何需要全文搜索的應用程序,尤其是跨平臺的應用程序。

它在java和.net中可用。它也可以在PHP中以zend框架模塊的形式提供。

Lucene做你想做的(索引搜索到的項目),你必須跟蹤一個lucene索引,但是它比在性能方面進行數據庫搜索好得多。 BTW,SO搜索由lucene提供支持。 :D

+0

如果你正在考慮Lucene,你應該看看Solr項目。把它想象成Lucene作爲服務 – sclarson 2013-03-06 03:24:38

4

您可能想看看xapianomega前端。它本質上是一個可以構建搜索功能的工具包。

1

解決此問題的最佳方法將取決於您如何構建網頁。

如果它們經常是由很多不同的記錄構成的(就像我想象的堆棧溢出頁面一樣),索引方法可能會帶來更好的結果,除非您在有效重構數據庫頁面方面投入了大量工作側。

您使用索引方法的缺點是轉身時間。有解決方法(如谷歌的網站地圖的東西),但他們也很複雜,以確保正確。

如果你使用數據庫路徑,也應該意識到,如果現代搜索引擎系統有鏈接數據進行處理,它的功能要好得多,因此找到一個能夠理解數據庫中'網頁'之間鏈接的系統會產生積極的影響。

0

這與您的問題有點正交,但我強烈建議使用RESTful搜索。也就是說,要執行從未執行的搜索,網站會將查詢POST到/ searching /。要重新進行搜索,網站GETs/searches/{some id}

有一些很好的文檔可以找到,例如here

(這麼說,我喜歡索引如果可能的話,雖然它是一個優化,從而可過早。)

-1

如果應用程序使用Java EE棧和你正在使用Hibernate可以使用Compass Framework維護數據庫的可搜索索引。指南針框架使用Lucene

唯一的問題是您無法複製您的搜索索引。因此,您需要使用羣集數據庫來保存索引表或使用已添加到Compass Framework 2.x中的較新的基於網格的索引存儲機制。

1

如果您在Microsoft平臺上,則可以使用索引服務。這與IIS網站非常容易集成。

它具有全文搜索,排名,擴展和包含某些文件類型等所有基本功能,您也可以通過元標記在html頁面中添加自己的元信息。

做一個谷歌,你會發現噸!

30

這取決於你的網站有多全面以及你想做多少事情。

如果您運行的是一個小網站沒有進一步的可能性,添加自定義搜索,讓谷歌做的工作(也許增加一個sitemap),並使用google custom search

如果您使用sql引擎運行中型網站,請使用您的sql引擎的搜索功能。

如果您如果您從您的應用程序要抽象搜索運行像J2EE或.NET中使用Lucene,一個偉大的,功能強大的搜索引擎或者其淨克隆lucene.Net

一些較重的軟件堆棧和能夠用XML/HTTP和JSON API以中性語言的方式查詢它,看看solr。 Solr在後臺運行lucene,但增加了一個漂亮的網頁界面。

+3

我對此有疑問。我可以實施谷歌自定義搜索的Intranet網站?如果我這樣做,我是否將我的公司置於危險之中?我寧願不寫我自己的邏輯。 – Richie 2014-03-04 01:38:48

相關問題