最新开源搜索引擎研究

来源:互联网 发布:linux 进程 物理内存 编辑:程序博客网 时间:2024/05/22 08:12

搜索引擎并不是对互联网进行直接搜索,而是对已抓取网页索引库的搜索,索引在其中扮演了最为重要的角色,索引算法的效率直接影响搜索引擎的效率,是评测搜索引擎是否高效的关键因素。网页爬行器、索引器、查询器共同构成了搜索引擎的重要组成单元。

 

目前,开放源代码的搜索引擎项目也有一些,主要集中在搜索引擎开发工具包与架构、Web搜索引擎、文件搜索引擎几个方面,下面就当前比较流行且相对比较成熟的几个搜索引擎项目进行说明。

 

开源搜索引擎工具包

 

1Xapian

 

Xapian是基于GPL发布的搜索引擎开发库,它采用C++语言编写,通过其提供绑定程序包可以使PerlPythonPHPJavaTckC#Ruby等语言方便地使用它。目前其最新版本为1.0.5

 

Xapian还是一个具有高适应性的工具集,使开发人员能够方便地为他们的应用程序添加高级索引及搜索功能。它支持信息检索的概率模型及丰富的布尔查询操作。Xapian的发布包通常由两部分组成:xapian-corexapian-bindings,前者是核心主程序,后者是与其他语言进行绑定的程序包。

 

xapian是一个能跟lucene媲美的开源检索系统,lucene要好多少倍了。而且运行效率也要高的多,但是由于没有lucenefield概念,所以刚接触的时候有些困难,不过omegaxapian的一个应用实例?是一个开源的程序代码,值得仔细学习。中文检索也支持,要想效率高需要有一个好的中文分词,最好能加进去。

 

项目官方网站:http://xapian.org/

 

Omega 简介

 

Xapian为程序开发者提供了丰富的API及文档进行程序的编制,而且还提供了许多编程实例及一个基于Xapian的应用程序OmegaOmega由索引器及基于CGI的前端搜索组成,能够为HTMLPHPPDFPostScriptOpenOffice/StarOfficeRTF等多种格式的文档编制索引,通过使用Perl DBI模块甚至能为MySQLPostgreSQLSQLiteSybaseMS SQLLDAPODBC等关系数据库编制索引,并能以CSVXML格式从前端导出搜索结果,程序开发者可以在此基础上进行扩展。

 

下面就Linux平台下Omega的安装及使用作简要介绍:

1)       安装Omega

 

在安装Omega之前首先要为系统安装Xapian Library。其安装步骤如下:

 

l         解压下载的xapian-core

tar zxvf xapian-core-<versionnumber>.tar.gz

l         进入解压后的文件夹,对Xapian Library源代码包进行配置:

cd xapian-core-<version>

./configure

l         编译Xapian Library后进行安装:

make

sudo make install

 

现在可以安装Omega了,其步骤如下:

 

l         解压下载的Omega

tar zxvf omega-<versionnumber>.tar.gz

l         进入解压后的文件夹,对Omega源代码包进行配置:

cd omega-<version>

./configure

l         编译omega后进行安装:

make

sudo make install

 

注:在make编译前,确保系统中已安装

 

ü         Apache或其他你熟悉的http服务程序

ü         C++编译器(可以是g++

 

    如在配置或安装过程中遇到错误,请参阅各源代码目录下的ReadmeInstall文件

 

2)       使用Omega

 

在使用Omega前先对它的运行环境进行配置

 

把编译好的Omega可执行文件复制到cgi-bin目录,cgi-bin目录的所在位置见apacheor httpd)的configuration files

 

cd ~

su

cd xapian-omega-1.0.5

cp omega /usr/lib/cgi-bin/omega.cgi

cp omega.conf /usr/lib/cgi-bin/

chmod 755 /usr/lib/cgi-bin/omega.cgi

exit

 

下面我们打开先前拷贝的omega.conf文件,下面是我机子上该文件的内容:

 

# Directory containing Xapian databases:

database_dir /var/lib/omega/data

 

# Directory containing OmegaScript templates:

template_dir /var/lib/omega/templates

 

# Directory to write Omega logs to:

log_dir /var/log/omega

 

# Directory containing any cdb files for the $lookup OmegaScript command:

cdb_dir /var/lib/omega/cdb

 

你可以修改以上目录位置也可以放置它不变,但你必须把缺少的目录给补上:

 

su

mkdir -p

/var/lib/omega/data

mkdir /var/lib/omega/templates

mkdir /var/lib/omega/cdb

mkdir /var/log/omega

 

然后拷贝templates到新的目录:

 

cd ~/xapian-omega-1.0.5

cp templates/* /var/lib/omega/templates

 

 

配置完Omega后,现在用一个sample数据包来测试Omega,该数据包在本文档目录下,解压后即可使用。

 

在使用Omega搜索引擎前我们先用Omega提供的omindex命令来给测试包建立索引:

 

Omindex是一个用来给文档做索引的应用程序,它知道怎样解析html文档,所以我们不需要再做其它事。Omindex的使用格式如下:

$ omindex --db DBPATH --url / WEBPATH

 

DBPATH是你保存索引的数据库位置,如 /var/lib/omega/data/defaultWEBPATH是要做索引的web文档的目录位置。

 

给测试包建立索引:

/usr/local/bin/omindex --db /var/lib/omega/data/default --url /book /var/www/book

[Entering directory /]

Indexing "/ci_01.htm" as text/html ...  added.

Indexing "/ci_02.htm" as text/html ...  added.

...

Indexing "/Introduction.htm" as text/html ... added.

Indexing "/Jpg4.htm" as text/html ...  added.

Indexing "/pato.htm" as text/html ... added.

 

其中--db /var/lib/omega/data/default告诉omindex我要建的索引数据库名为default,这个是Omega默认的数据库名。--url /book指定要索引的目录,/var/www/book告诉该目录的具体位置。Omindex不能进行网络爬行,它只能索引本地磁盘上的文件。

 

下面可以用Omega来搜索你想要的东西了

Omega的使用格式如下:

 

$ /usr/lib/omega/bin/omega 'P=my search terms' HITSPERPAGE=10

 

   其中P代表概率查询,my search terms是你要搜索的关键字。执行后Omega将输出很多HTML

 

一般我们通过CGI来使用Omega,这个只是一个test mode。要真正使用Omega,请

安装后拷贝或链接omega可执行文件到你的cgi-bin目录,然后经CGI运行它。

 

有关OmegaCGIOmegaScript语言的更多信息请参阅CGI parametersOmegaScript文档。

 

2Lucene

 

Lucene是目前最为流行的开放源代码全文搜索引擎工具包,隶属于Apache基金会,由资深全文索引/检索专家Doug Cutting所发起,并以其妻子的中间名作为项目的名称。Lucene不是一个具有完整特征的搜索应用程序,而是一个专注于文本索引和搜索的工具包,能够为应用程序添加索引与搜索能力。基于Lucene在索引及搜索方面的优秀表现,虽然由Java编写的Lucene具有天生的跨平台性,但仍被改编为许多其他语言的版本:PerlPythonC++.Net等。

 

同其他开源项目一样,Lucene具有非常好的架构,能够方便地在其基础上进行研究与开发,添加新功能或者开发新系统。Lucene本身只支持文本文件及少量语种的索引,并且不具备爬虫功能,而这正是Lucene的魅力所在,通过Lucene提供的丰富接口,我们可以根据自身的需要在其上添加具体语言的分词器,针对具体文档的文本解析器等,而这些具体的功能实现都可以借助于一些已有的相关开源软件项目、甚至是商业软件来完成,这也保证了Lucene在索引及搜索方面的专注性。目前,通过在Lucene的基础上加入爬行器、文本解析器等也形成了一些新的开源项目,如LIUSNutch等。并且Lucene的索引数据结构已经成了一种事实上的标准,为许多搜索引擎所采用。

 

项目官方网站:http://lucene.apache.org/

 

3LIUS

 

LIUSLucene Index Update and Search的缩写,它是以Lucene为基础发展起来的一种文本索引框架,和Lucene一样,同样可以看作搜索引擎开发工具包。它在Lucene的基础上作了一些相应的研究及添加了一些新的功能。LIUS借助于许多开源软件,可以直接对各种不同格式/类型的文档进行文本解析与索引,这些文档格式包括MS WordMS ExcelMS PowerPoingRTFPDFXMLHTMLTXTOpen OfficeJavaBeans等,对Java Beans的支持对于进行数据库索引非常有用,在用户进行对象关系映射(如:HibernateJDOTopLinkTorque等)的数据库连接编程时会变得更加精确。LIUS还在Lucene的基础上增加了索引更新功能,使针对索引的维护功能进一步完善。并且支持混和索引,可以把同一目录下与某一条件相关的所有内容整合到一起,这种功能对于需要对多种不同格式的文档同时进行索引时非常有用。

 

项目官方网站:http://sourceforge.net/projects/lius/

 

4Egothor

 

Egothor是一款开源的高性能全文搜索引擎,适用于基于全文搜索功能的搜索应用,它具有与Luccene类似的核心算法,这个项目已经存在了很多年,并且拥有一些积极的开发人员及用户团体。项目发起者Leo Galambos是捷克布拉格查理大学数学与物理学院的一名高级助理教授,他在博士研究生期间发起了此项目。

 

更多的时候,我们把Egothor看作一个用于全文搜索引擎的Java库,能够为具体的应用程序添加全文搜索功能。它提供了扩展的Boolean模块,使得它能被作为Boolean模块或者Vector模块使用,并且Egothor具有一些其他搜索引擎所不具有的特有功能:它采用新的动  态算法以有效提高索引更新的速度,并且支持平行的查询方式,可有效提高查询效率。在Egothor的发行版中,加入了爬行器、文本解析器等许多增强易用性的应用程序,融入了GolombElias-Gamma等多种高效的压缩方法,支持多种常用文档格式的文本解析,如HTMLPDFPS、微软Office文档、XLS等,提供了GUI的索引界面及基于Applet或者Web的查询方式。另外,Egothor还能被方便地配置成独立的搜索引擎、元数据搜索器、点对点的HUB等多种且体的应用系统。

 

项目官方网站:http://www.egothor.org/

 

5Compass

 

Compass是在Lucene上实现的开源搜索引擎架构,相对比于Lucene而言,提供更加简洁的搜索引擎API。增加了索引事务处理的支持,使其能够更方便地与数据库等事务处理应用进行整合。它更新时无需删除原文档,更加简单更加高效。资源与搜索引擎之间采用映射机制,此种机制使得那些已经使用了Lucene或者不支持对象及XML的应用程序迁移到Compass上进行开发变得非常容易。

 

Compass还能与HibernateSpring等架构进行集成,因此如果想在HibernateSpring项目中加入搜索引擎功能,Compass是个极好的选择。

 

项目官方网站:http://www.compass-project.org/

 

开源桌面搜索引擎系统

 

1Regain

 

regain是一款与Web搜索引擎类似的桌面搜索引擎系统,其不同之处在于regain不是对Internet内容的搜索,而是针对自己的文档或文件的搜索,使用regain可以轻松地在几秒内完成大量数据(许多个G)的搜索。Regain采用了Lucene的搜索语法,因此支持多种查询方式,支持多索引的搜索及基于文件类型的高级搜索,并且能实现URL重写及文件到HTTP的桥接,并且对中文也提供了较好的支持。

 

Regain提供了两种版本:桌面搜索及服务器搜索。桌面搜索提供了对普通桌面计算机的文档与局域网环境下的网页的快速搜索。服务器版本主要安装在Web服务器上,为网站及局域网环境下的文件服务器进行搜索。

 

Regain使用Java编写,因此可以实现跨平台安装,能安装于WindowsLinuxMac OSSolaris上。服务器版本需要JSPs环境及标签库(tag library),因此需要安装一个Tomcat容器。而桌面版自带了一个小型的Web服务器,安装非常简单。

 

目前Regain的最新发布版本为V1.2.3,分WindowsLinux两个版本,需要Java环境的支持。

 

Regain的安装使用方法很简单,这里就不介绍了。

 

项目官方网站:http://regain.sourceforge.net/

 

2Zilverline

 

Zilverline是一款以Lucene为基础的桌面搜索引擎,采用了Spring框架,它主要用于个人本地磁盘及局域网内容的搜索,支持多种语言,并且具有自己的中文名字:银钱查打引擎。Zilverline提供了丰富的文档格式的索引支持,如微软Office文档、RTFJavaCHM等,甚至能够为归档文件编制索引进行搜索,如ziprar及其他归档文件,在索引过程中,Zilverlineziprarchm等归档文件中抽取文件来编制索引。Zilverline可以支持增量索引的方式,只对新文件编制索引,同时也支持定期自动索引,其索引库能被存放于Zilverline能够访问到的地方,甚至是DVD中。同时,Zilverline还支持文件路径到URL的映射,这样可以使用户远程搜索本地文件。

 

Zilverline提供了个人及研究、商业应用两种许可方式,其发布形式为一个简单的war包,可以从其官方网站下载(http://www.zilverline.org/)。Zilverline的运行环境需要Java环境及Servlet容器,一般使用Tomcat即可。在确保正确安装JDKTomcat容器后只需将Zilverlinewar包(zilverline-1.5.0.war)拷贝到Tomcatwebapps目录后重启Tomcat容器即可开始使用Zilverline搜索引擎了。

 

项目官方网站:http://www.zilverline.org/