1. 程式人生 > >20款開源搜尋引擎介紹與比較

20款開源搜尋引擎介紹與比較

開放原始碼搜尋引擎為人們學習、研究並掌握搜尋技術提供了極好的途徑與素材,推動了搜尋技術的普及與發展,使越來越多的人開始瞭解並推廣使用搜索技術。使用開源搜尋引擎,可以大大縮短構建搜尋應用的週期,並可根據應用需求打造個性化搜尋應用,甚至構建符合特定需求的搜尋引擎系統。搜尋引擎的開源,無論是對技術人員還是普通使用者,都是一個福音。  

搜尋引擎的工作流程主要分為三步:從網際網路抓取網頁→建立抓取網頁的索引庫→從索引庫中進行搜尋。

首先需要一個能訪問網路的爬蟲器程式,依據URL之間的關聯性自動爬行整個網際網路,並對爬行過的網頁進行抓取收集。當網頁被收集回來後,採用索引分析程式進行網頁資訊的分析,依據一定的相關度演算法(如超連結演算法)進行大量計算,建立倒排序的索引庫。索引庫建好後用戶就可以通過提供的搜尋介面提交關鍵詞進行搜尋,依據特定的排序演算法返回搜尋結果。因此,搜尋引擎並不是對網際網路進行直接搜尋,而是對已抓取網頁索引庫的搜尋,這也是能快速返回搜尋結果的原因,索引在其中扮演了最為重要的角色,索引演算法的效率直接影響搜尋引擎的效率,是評測搜尋引擎是否高效的關鍵因素。

網頁爬行器、索引器、查詢器共同構成了搜尋引擎的重要組成單元,針對特定的語言,如中文、韓文等,還需要分詞器進行分詞,一般情況下,分詞器與索引器一起使用建立特定語言的索引庫。它們之間的協同關係如圖1所示。

而開放原始碼的搜尋引擎為使用者提供了極大的透明性,開放的原始碼、公開的排序演算法、隨意的可定製性,相比於商業搜尋引擎而言,更為使用者所需要。目前,開放原始碼的搜尋引擎專案也有一些,主要集在中搜索引擎開發工具包與架構、Web搜尋引擎、檔案搜尋引擎幾個方面,本文概要介紹一下當前比較流行且相對比較成熟的幾個搜尋引擎專案。

開源搜尋引擎工具包

1.Lucene

Lucene是目前最為流行的開放原始碼全文搜尋引擎工具包,隸屬於Apache基金會,由資深全文索引/檢索專家Doug Cutting所發起,並以其妻子的中間名作為專案的名稱。Lucene不是一個具有完整特徵的搜尋應用程式,而是一個專注於文字索引和搜尋的工具包,能夠為應用程式新增索引與搜尋能力。基於Lucene在索引及搜尋方面的優秀表現,雖然由Java編寫的Lucene具有天生的跨平臺性,但仍被改編為許多其他語言的版本:Perl、Python、C++、.Net等。

同其他開源專案一樣,Lucene具有非常好的架構,能夠方便地在其基礎上進行研究與開發,新增新功能或者開發新系統。Lucene本身只支援文字檔案及少量語種的索引,並且不具備爬蟲功能,而這正是Lucene的魅力所在,通過Lucene提供的豐富介面,我們可以根據自身的需要在其上新增具體語言的分詞器,針對具體文件的文字解析器等,而這些具體的功能實現都可以藉助於一些已有的相關開源軟體專案、甚至是商業軟體來完成,這也保證了Lucene在索引及搜尋方面的專注性。目前,通過在Lucene的基礎上加入爬行器、文字解析器等也形成了一些新的開源專案,如LIUS、Nutch等。並且Lucene的索引資料結構已經成了一種事實上的標準,為許多搜尋引擎所採用。

2.LIUS

LIUS即Lucene Index Update and Search的縮寫,它是以Lucene為基礎發展起來的一種文字索引框架,和Lucene一樣,同樣可以看作搜尋引擎開發工具包。它在Lucene的基礎上作了一些相應的研究及添加了一些新的功能。LIUS藉助於許多開源軟體,可以直接對各種不同格式/型別的文件進行文字解析與索引,這些文件格式包括MS Word、MS Excel、MS PowerPoing、RTF、PDF、XML、HTML、TXT、Open Office及JavaBeans等,對Java Beans的支援對於進行資料庫索引非常有用,在使用者進行物件關係對映(如:Hibernate、JDO、TopLink、Torque等)的資料庫連線程式設計時會變得更加精確。LIUS還在Lucene的基礎上增加了索引更新功能,使針對索引的維護功能進一步完善。並且支援混和索引,可以把同一目錄下與某一條件相關的所有內容整合到一起,這種功能對於需要對多種不同格式的文件同時進行索引時非常有用。

3.Egothor

Egothor是一款開源的高效能全文搜尋引擎,適用於基於全文搜尋功能的搜尋應用,它具有與Luccene類似的核心演算法,這個專案已經存在了很多年,並且擁有一些積極的開發人員及使用者團體。專案發起者Leo Galambos是捷克布拉格查理大學數學與物理學院的一名高階助理教授,他在博士研究生期間發起了此專案。

更多的時候,我們把Egothor看作一個用於全文搜尋引擎的Java庫,能夠為具體的應用程式新增全文搜尋功能。它提供了擴充套件的Boolean模組,使得它能被作為Boolean模組或者Vector模組使用,並且Egothor具有一些其他搜尋引擎所不具有的特有功能:它採用新的動態演算法以有效提高索引更新的速度,並且支援平行的查詢方式,可有效提高查詢效率。在Egothor的發行版中,加入了爬行器、文字解析器等許多增強易用性的應用程式,融入了Golomb、Elias-Gamma等多種高效的壓縮方法,支援多種常用文件格式的文字解析,如HTML、PDF、PS、微軟Office文件、XLS等,提供了GUI的索引介面及基於Applet或者Web的查詢方式。另外,Egothor還能被方便地配置成獨立的搜尋引擎、元資料搜尋器、點對點的HUB等多種且體的應用系統。

4.Xapian

Xapian是基於GPL釋出的搜尋引擎開發庫,它採用C++語言編寫,通過其提供繫結程式包可以使Perl、Python、PHP、Java、Tck、C#、Ruby等語言方便地使用它。

Xapian還是一個具有高適應性的工具集,使開發人員能夠方便地為他們的應用程式新增高階索引及搜尋功能。它支援資訊檢索的概率模型及豐富的布林查詢操作。Xapian的釋出包通常由兩部分組成:xapian-core及xapian-bindings,前者是核心主程式,後者是與其他語言進行繫結的程式包。

Xapian為程式開發者提供了豐富的API及文件進行程式的編制,而且還提供了許多程式設計例項及一個基於Xapian的應用程式Omega,Omega由索引器及基於CGI的前端搜尋組成,能夠為HTML、PHP、PDF、PostScript、OpenOffice/StarOffice、RTF等多種格式的文件編制索引,通過使用Perl DBI模組甚至能為MySQL、PostgreSQL、SQLite、Sybase、MS SQL、LDAP、ODBC等關係資料庫編制索引,並能以CSV或XML格式從前端匯出搜尋結果,程式開發者可以在此基礎上進行擴充套件。

5.Compass

Compass是在Lucene上實現的開源搜尋引擎架構,相對比於Lucene而言,提供更加簡潔的搜尋引擎API。增加了索引事務處理的支援,使其能夠更方便地與資料庫等事務處理應用進行整合。它更新時無需刪除原文件,更加簡單更加高效。資源與搜尋引擎之間採用對映機制,此種機制使得那些已經使用了Lucene或者不支援物件及XML的應用程式遷移到Compass上進行開發變得非常容易。

Compass還能與Hibernate、Spring等架構進行整合,因此如果想在Hibernate、Spring專案中加入搜尋引擎功能,Compass是個極好的選擇。

開源Web搜尋引擎系統

1.Nutch

Nutch是Lucene的作者Doug Cutting發起的另一個開源專案,它是構建於Lucene基礎上的完整的Web搜尋引擎系統,雖然誕生時間不長,但卻以其優良血統及簡潔方便的使用方式而廣收歡迎。我們可以使用Nutch搭建類似Google的完整的搜尋引擎系統,進行區域網、網際網路的搜尋。

2.YaCy

YaCy是一款基於P2P(peer-to-peer)的分散式開源Web搜尋引擎系統,採用Java語言進行編寫,其核心是分佈在數百臺計算機上的被稱為YaCy-peer的計算機程式,基於P2P網路構成了YaCy網路,整個網路是一個分散的架構,在其中所有的YaCy-peers都處於對等的地位,沒有統一的中心伺服器,每個YaCy-peer都能獨立的進行網際網路的爬行抓取、分析及建立索引庫,通過P2P網路與其他YaCy-peers進行共享,並且每個YaCy-peer又都是一個獨立的代理伺服器,能夠對本機使用者使用過的網頁進行索引,並且採取多機制來保護使用者的隱私,同時使用者也通過本機執行的Web伺服器進行查詢及返回查詢結果。

YaCy搜尋引擎主要包括五個部分,除普通搜尋引擎所具有的爬行器、索引器、反排序的索引庫外,它還包括了一個非常豐富的搜尋與管理介面以及用於資料共享的P2P網路。

開源桌面搜尋引擎系統

1.Regain

regain是一款與Web搜尋引擎類似的桌面搜尋引擎系統,其不同之處在於regain不是對Internet內容的搜尋,而是針對自己的文件或檔案的搜尋,使用regain可以輕鬆地在幾秒內完成大量資料(許多個G)的搜尋。Regain採用了Lucene的搜尋語法,因此支援多種查詢方式,支援多索引的搜尋及基於檔案型別的高階搜尋,並且能實現URL重寫及檔案到HTTP的橋接,並且對中文也提供了較好的支援。

Regain提供了兩種版本:桌面搜尋及伺服器搜尋。桌面搜尋提供了對普通桌面計算機的文件與區域網環境下的網頁的快速搜尋。伺服器版本主要安裝在Web伺服器上,為網站及區域網環境下的檔案伺服器進行搜尋。

Regain使用Java編寫,因此可以實現跨平臺安裝,能安裝於Windows、Linux、Mac OS及Solaris上。伺服器版本需要JSPs環境及標籤庫(tag library),因此需要安裝一個Tomcat容器。而桌面版自帶了一個小型的Web伺服器,安裝非常簡單。

2.Zilverline

Zilverline是一款以Lucene為基礎的桌面搜尋引擎,採用了Spring框架,它主要用於個人本地磁碟及區域網內容的搜尋,支援多種語言,並且具有自己的中文名字:銀錢查打引擎。Zilverline提供了豐富的文件格式的索引支援,如微軟Office文件、RTF、Java、CHM等,甚至能夠為歸檔檔案編制索引進行搜尋,如zip、rar及其他歸檔檔案,在索引過程中,Zilverline從zip、rar、chm等歸檔檔案中抽取檔案來編制索引。Zilverline可以支援增量索引的方式,只對新檔案編制索引,同時也支援定期自動索引,其索引庫能被存放於Zilverline能夠訪問到的地方,甚至是DVD中。同時,Zilverline還支援檔案路徑到URL的對映,這樣可以使使用者遠端搜尋本地檔案。

Zilverline提供了個人及研究、商業應用兩種許可方式,其釋出形式為一個簡單的war包,可以從其官方網站下載(http://www.zilverline.org/)。Zilverline的執行環境需要Java環境及Servlet容器,一般使用Tomcat即可。在確保正確安裝JDK及Tomcat容器後只需將Zilverline的war包(zilverline-1.5.0.war)拷貝到Tomcat的webapps目錄後重啟Tomcat容器即可開始使用Zilverline搜尋引擎了。

附:

20款開源搜尋引擎介紹

Sphider是一個輕量級,採用PHP開發的web spider和搜尋引擎,使用mysql來儲存資料。可以利用它來為自己的網站新增搜尋功能。Sphider非常小,易於安裝和修改,已經有數千網站在使用它。

RiSearch PHP是一個高效,功能強大的搜尋引擎,特別適用於中小型網站。RiSearch PHP非常快,它能夠在不到1秒鐘內搜尋5000-10000個頁面。RiSearch是一個索引搜尋引擎,這就意味著它先將你的網站做索引並建立一個數據庫來儲存你網站所有頁面的關鍵詞以便快速搜尋。Risearch是全文搜尋引擎指令碼,它把所有的關鍵詞都編成一個文件索引除了配置檔案裡面的定義排除的關鍵詞。 RiSearch使用經典的反向索引演算法(與大型的搜尋引擎相同),這就是為什麼它會比其它搜尋引擎快的原因。

PhpDig是一個採用PHP開發的Web爬蟲和搜尋引擎。通過對動態和靜態頁面進行索引建立一個詞彙表。當搜尋查詢時,它將按一定的排序規則顯示包含關鍵字的搜尋結果頁面。PhpDig包含一個模板系統並能夠索引PDF,Word,Excel,和PowerPoint文件。PHPdig適用於專業化更強、層次更深的個性化搜尋引擎,利用它打造針對某一領域的垂直搜尋引擎是最好的選擇。

OpenWebSpider是一個開源多執行緒Web Spider(robot:機器人,crawler:爬蟲)和包含許多有趣功能的搜尋引擎。

Egothor是一個用Java編寫的開源而高效的全文字搜尋引擎。藉助Java的跨平臺特性,Egothor能應用於任何環境的應用,既可配置為單獨的搜尋引擎,又能用於你的應用作為全文檢索之用。

Nutch

Nutch 是一個開源Java 實現的搜尋引擎。它提供了我們執行自己的搜尋引擎所需的全部工具。包括全文搜尋和Web爬蟲。

Apache Lucene是一個基於Java全文搜尋引擎,利用它可以輕易地為Java軟體加入全文搜尋功能。Lucene的最主要工作是替檔案的每一個字作索引,索引讓搜尋的效率比傳統的逐字比較大大提高,Lucen提供一組解讀,過濾,分析檔案,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應自已需要自訂其功能。

Oxyus

是一個純java寫的web搜尋引擎。

BDDBot是一個簡單的易於理解和使用的搜尋引擎。它目前在一個文字檔案(urls.txt)列出的URL中爬行,將結果儲存在一個數據庫中。它也支援一個簡單的Web伺服器,這個伺服器接受來自瀏覽器的查詢並返回響應結果。它可以方便地整合到你的Web站點中。

Zilverline是一個搜尋引擎,它通過web方式搜尋本地硬碟或intranet上的內容。Zilverline可以從PDF, Word, Excel, Powerpoint, RTF, txt, java, CHM,zip, rar等文件中抓取它們的內容來建立摘要和索引。從本地硬碟或intranet中查詢到的結果可重新再進行檢索。Zilverline支援多種語言其中包括中文。

XQEngine用於XML文件的全文字搜尋引擎。利用XQuery做為它的前端查詢語言。它能夠讓你查詢XML文件集合通過使用關鍵字的邏輯組合。有點類似於Google與其它搜尋引擎搜尋html文件一樣。XQEngine只是一個用Java開發的很緊湊的可嵌入的元件。

MG4J

MG4J可以讓你為大量的文件集合構建一個被壓縮的全文字索引,通過使內插編碼(interpolative coding)技術。

JXTA Search是一個分散式的搜尋系統。設計用在點對點的網路與網站上。

YaCy

YaCy基於p2p的分散式Web搜尋引擎。同時也是一個Http快取代理伺服器。這個專案是構建基於p2p Web索引網路的一個新方法。它可以搜尋你自己的或全域性的索引,也可以Crawl自己的網頁或啟動分散式Crawling等。

Red-Piranha是一個開源搜尋系統,它能夠真正”學習”你所要查詢的是什麼。Red-Piranha可作為你桌面系統(Windows,Linux與Mac)的個人搜尋引擎,或企業內部網搜尋引擎,或為你的網站提供搜尋功能,或作為一個P2P搜尋引擎,或與wiki結合作為一個知識/文件管理解決方案,或搜尋你要的RSS聚合資訊,或搜尋你公司的系統(包括SAP,Oracle或其它任何Database/Data source),或用於管理PDF,Word和其它文件,或作為一個提供搜尋資訊的WebService或為你的應用程式(Web,Swing,SWT,Flash,Mozilla-XUL,PHP, Perl或c#/.Net)提供搜尋後臺等等。

LIUS

LIUS是一個基於Jakarta Lucene專案的索引框架。LIUS為Lucene添加了對許多檔案格式的進行索引功能如:Ms Word,Ms Excel,Ms PowerPoint,RTF,PDF,XML,HTML,TXT,Open Office序列和JavaBeans.針對JavaBeans的索引特別有用當我們要對資料庫進行索引或剛好使用者使用持久層ORM技術如:Hibernate,JDO,Torque,TopLink進行開發時。

Solr是一個高效能,採用Java5開發,基於Lucene的全文搜尋伺服器。文件通過Http利用XML加到一個搜尋集合中。查詢該集合也是通過 http收到一個XML/JSON響應來實現。它的主要特性包括:高效、靈活的快取功能,垂直搜尋功能,高亮顯示搜尋結果,通過索引複製來提高可用性,提供一套強大Data Schema來定義欄位,型別和設定文字分析,提供基於Web的管理介面等。

Paoding中文分詞是一個使用Java開發的,可結合到Lucene應用中的,為網際網路、企業內部網使用的中文搜尋引擎分片語件。Paoding填補了國內中文分詞方面開源元件的空白,致力於此並希翼成為網際網路網站首選的中文分詞開源元件。 Paoding中文分詞追求分詞的高效率和使用者良好體驗。

Carrot2是一個開源搜尋結果分類引擎。它能夠自動把搜尋結果組織成一些專題分類。Carrot2提供的一個架構能夠從各種搜尋引擎(YahooAPI、GoogleAPI、MSN Search API、eTools Meta Search、Alexa Web Search、PubMed、OpenSearch、Lucene index、SOLR)獲取搜尋結果。

regain是一款與Web搜尋引擎類似的桌面搜尋引擎系統,其不同之處在於regain不是對Internet內容的搜 索,而是針對自己的文件或檔案的搜尋,使用regain可以輕鬆地在幾秒內完成大量資料(許多個G)的搜尋。Regain採用了Lucene的搜尋語法, 因此支援多種查詢方式,支援多索引的搜尋及基於檔案型別的高階搜尋,並且能實現URL重寫及檔案到HTTP的橋接,並且對中文也提供了較好的支援。

Regain提供了兩種版本:桌面搜尋及伺服器搜尋。桌面搜尋提供了對普通桌面計算機的文件與區域網環境下的網頁的快速搜尋。伺服器版本主要安裝在Web伺服器上,為網站及區域網環境下的檔案伺服器進行搜尋。