開源代碼搜索引擎介紹

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

搜索引擎的工作流程主要分爲三步:從互聯網抓取網頁→創建抓取網頁的索引庫→從索引庫中進行搜索。 

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

網頁爬行器、索引器、查詢器共同構成了搜索引擎的重要組成單元,針對特定的語言,如中文、韓文等,還需要分詞器進行分詞,一般情況下,分詞器與索引器一起使用創建特定語言的索引庫。

而開放源代碼的搜索引擎爲用戶提供了極大的透明性,開放的源代碼、公開的排序算法、隨意的可定製性,相比於商業搜索引擎而言,更爲用戶所需要。目前,開放源代碼的搜索引擎項目也有一些,主要集在中搜索引擎開發工具包與架構、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搜索引擎了 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章