天天看點

開源搜尋引擎

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

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

首先需要一個能通路網絡的爬蟲器程式,依據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搜尋引擎了。

繼續閱讀