搜索引擎的工做流程主要分爲三步:從互聯網抓取網頁→建立抓取網頁的索引庫→從索引庫中進行搜索。html
首 先須要一個能訪問網絡的爬蟲器程序,依據URL之間的關聯性自動爬行整個互聯網,並對爬行過的網頁進行抓取收集。當網頁被收集回來後,採用索引分析程序進 行網頁信息的分析,依據必定的相關度算法(如超連接算法)進行大量計算,建立倒排序的索引庫。索引庫建好後用戶就能夠經過提供的搜索界面提交關鍵詞進行搜 索,依據特定的排序算法返回搜索結果。所以,搜索引擎並非對互聯網進行直接搜索,而是對已抓取網頁索引庫的搜索,這也是能快速返回搜索結果的緣由,索引 在其中扮演了最爲重要的角色,索引算法的效率直接影響搜索引擎的效率,是評測搜索引擎是否高效的關鍵因素。前端
網頁爬行器、索引器、查詢器共同構成了搜索引擎的重要組成單元,針對特定的語言,如中文、韓文等,還須要分詞器進行分詞,通常狀況下,分詞器與索引器一塊兒使用建立特定語言的索引庫。它們之間的協同關係如圖1所示。java
而 開放源代碼的搜索引擎爲用戶提供了極大的透明性,開放的源代碼、公開的排序算法、隨意的可定製性,相比於商業搜索引擎而言,更爲用戶所須要。目前,開放源 代碼的搜索引擎項目也有一些,主要集在中搜索引擎開發工具包與架構、Web搜索引擎、文件搜索引擎幾個方面,本文概要介紹一下當前比較流行且相對比較成熟 的幾個搜索引擎項目。mysql
開源搜索引擎工具包web
1.Lucene算法
Lucene 是目前最爲流行的開放源代碼全文搜索引擎工具包,隸屬於Apache基金會,由資深全文索引/檢索專家Doug Cutting所發起,並以其妻子的中間名做爲項目的名稱。Lucene不是一個具備完整特徵的搜索應用程序,而是一個專一於文本索引和搜索的工具包,能 夠爲應用程序添加索引與搜索能力。基於Lucene在索引及搜索方面的優秀表現,雖然由Java編寫的Lucene具備天生的跨平臺性,但仍被改編爲許多 其餘語言的版本:Perl、Python、C++、.Net等。sql
同 其餘開源項目同樣,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的基礎上增長了索引更新功能,使針對索引的維護功能進一步完善。而且支持混和索引,能夠把同一目錄下與某 一條件相關的全部內容整合到一塊兒,這種功能對於須要對多種不一樣格式的文檔同時進行索引時很是有用。c#
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
Sphider是一個輕量級,採用PHP開發的web spider和搜索引擎,使用mysql來存儲數據。能夠利用它來爲本身的網站添加搜索功能。Sphider很是小,易於安裝和修改,已經有數千網站在使用它。
RiSearch PHP
RiSearch PHP是一個高效,功能強大的搜索引擎,特別適用於中小型網站。RiSearch PHP很是快,它可以在不到1秒鐘內搜索5000-10000個頁面。RiSearch是一個索引搜索引擎,這就意味着它先將你的網站作索引並創建一個數 據庫來存儲你網站全部頁面的關鍵詞以便快速搜索。Risearch是全文搜索引擎腳本,它把全部的關鍵詞都編成一個文檔索引除了配置文件裏面的定義排除的 關鍵詞。 RiSearch使用經典的反向索引算法(與大型的搜索引擎相同),這就是爲何它會比其它搜索引擎快的緣由。
PhpDig
PhpDig是一個採用PHP開發的Web爬蟲和搜索引擎。經過對動態和靜態頁面進行索引創建一個詞彙表。當搜索查詢時,它將按必定的排序規則顯示 包含關鍵字的搜索結果頁面。PhpDig包含一個模板系統並可以索引PDF,Word,Excel,和PowerPoint文檔。PHPdig適用於專業 化更強、層次更深的個性化搜索引擎,利用它打造針對某一領域的垂直搜索引擎是最好的選擇。
OpenWebSpider
OpenWebSpider是一個開源多線程Web Spider(robot:機器人,crawler:爬蟲)和包含許多有趣功能的搜索引擎。
Egothor
Egothor是一個用Java編寫的開源而高效的全文本搜索引擎。藉助Java的跨平臺特性,Egothor能應用於任何環境的應用,既可配置爲單獨的搜索引擎,又能用於你的應用做爲全文檢索之用。
Nutch
Nutch 是一個開源Java 實現的搜索引擎。它提供了咱們運行本身的搜索引擎所需的所有工具。包括全文搜索和Web爬蟲。
Lucene
Apache Lucene是一個基於Java全文搜索引擎,利用它能夠輕易地爲Java軟件加入全文搜尋功能。Lucene的最主要工做是替文件的每個字做索引,索 引讓搜尋的效率比傳統的逐字比較大大提升,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的 是使使用者能夠隨時應自已須要自訂其功能。
Oxyus
是一個純java寫的web搜索引擎。
BDDBot
BDDBot是一個簡單的易於理解和使用的搜索引擎。它目前在一個文本文件(urls.txt)列出的URL中爬行,將結果保存在一個數據庫中。它也支持一個簡單的Web服務器,這個服務器接受來自瀏覽器的查詢並返回響應結果。它能夠方便地集成到你的Web站點中。
Zilverline
Zilverline是一個搜索引擎,它經過web方式搜索本地硬盤或intranet上的內容。Zilverline能夠從PDF, Word, Excel, Powerpoint, RTF, txt, java, CHM,zip, rar等文檔中抓取它們的內容來創建摘要和索引。從本地硬盤或intranet中查找到的結果可從新再進行檢索。Zilverline支持多種語言其中包 括中文。
XQEngine
XQEngine用於XML文檔的全文本搜索引擎。利用XQuery作爲它的前端查詢語言。它可以讓你查詢XML文檔集合經過使用關鍵字的邏輯組合。有點相似於Google與其它搜索引擎搜索html文檔同樣。XQEngine只是一個用Java開發的很緊湊的可嵌入的組件。
MG4J
MG4J可讓你爲大量的文檔集合構建一個被壓縮的全文本索引,經過使內插編碼(interpolative coding)技術。
JXTA Search
JXTA Search是一個分佈式的搜索系統。設計用在點對點的網絡與網站上。
YaCy
YaCy基於p2p的分佈式Web搜索引擎。同時也是一個Http緩存代理服務器。這個項目是構建基於p2p Web索引網絡的一個新方法。它能夠搜索你本身的或全局的索引,也能夠Crawl本身的網頁或啓動分佈式Crawling等。
Red-Piranha
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進行開發時。
Apache Solr
Solr是一個高性能,採用Java5開發,基於Lucene的全文搜索服務器。文檔經過Http利用XML加到一個搜索集合中。查詢該集合也是通 過 http收到一個XML/JSON響應來實現。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結果,經過索引複製來提升可用性,提 供一套強大Data Schema來定義字段,類型和設置文本分析,提供基於Web的管理界面等。
Paoding
Paoding中文分詞是一個使用Java開發的,可結合到Lucene應用中的,爲互聯網、企業內部網使用的中文搜索引擎分詞組件。 Paoding填補了國內中文分詞方面開源組件的空白,致力於此並希翼成爲互聯網網站首選的中文分詞開源組件。 Paoding中文分詞追求分詞的高效率和用戶良好體驗。
Carrot2
Carrot2是一個開源搜索結果分類引擎。它可以自動把搜索結果組織成一些專題分類。Carrot2提供的一個架構可以從各類搜索引擎 (YahooAPI、GoogleAPI、MSN Search API、eTools Meta Search、Alexa Web Search、PubMed、OpenSearch、Lucene index、SOLR)獲取搜索結果。
Regain
regain是一款與Web搜索引擎相似的桌面搜索引擎系統,其不一樣之處在於regain不是對Internet內容的搜 索,而是針對本身的文檔或文件的搜索,使用regain能夠輕鬆地在幾秒內完成大量數據(許多個G)的搜索。Regain採用了Lucene的搜索語法, 所以支持多種查詢方式,支持多索引的搜索及基於文件類型的高級搜索,而且能實現URL重寫及文件到HTTP的橋接,而且對中文也提供了較好的支持。
Regain提供了兩種版本:桌面搜索及服務器搜索。桌面搜索提供了對普通桌面計算機的文檔與局域網環境下的網頁的快速搜索。服務器版本主要安裝在Web服務器上,爲網站及局域網環境下的文件服務器進行搜索。