域名注册
- 中文域名
- 英文域名
- 通用网址
- 域名解析
- 域名转入\转出
虚拟主机
- 主机购买
- 管理主机
- FTP上传
- 数据库管理1)注册竞价服务账号
2)缴纳竞价服务推广费用
3)开通服务
4)开始推广
- 主机续费升级
网站建设
- 建站流程介绍
- 网站设计
- 网站改版
- 网站维护
- 网站推广
企业邮局
网站优化
网站备案
服务器租用
其它服务
搜索引擎:利用Xapian构建自己的搜索引擎
- 作者:曾小姐 文章来源:成都网站营销 点击数:1463 更新时间:2009-10-15
-
今天会更大家说到一个新名词Xapian,什么是Xapian呢?
不用着急,我们先来看看Xapian与开源
Xapian的官方网站是http://www.xapian.org,这是一个非常优秀的开源搜索引擎项目,百度搜索引擎其实只是一个通俗的说法,正式的说法其实是IR(InformationRetrieval)系统。Xapian的License是GPL,这意味着允许使用者自由地修改其源码并发布之。Xapian的中文资料非常少,可以说现在互联网上连一篇完整详细的Xapian中文介绍文档,更别说中文API文档了。但其实,Xapian的英文资料也不多,除了官方网站上的Docs和Wiki外,还有一些网站上的邮件列表,在这方面跟Lucene没得比。当然,Lucene现在已经发展到2.x版本了,而Xapian的最新版本才1.012,国外开源项目一般对版本号控制得比较严格,一个项目一般到了1.x才算稳定和成熟的。
疑问:Xapian可以运行在那些平台?
Xapian由C++编写,但可以绑定到Perl,Python,PHP,Java,Tcl,C#和Ruby甚至更多的语言,Xapian可以说是STL编程的典范,在这里您可以找到熟悉的引用计数型智能指针、容器和迭代器,甚至连命名也跟STL相似,相信一定能引起喜好C++和STL的你的共鸣(实际上,很少C++程序员完全不使用STL)。由于Xapian使用的是STL和C运行时库,因此具有高度可移值性,官方说法是可以运行在Linux、MacOSX、FreeBSD、NetBSD、OpenBSD、Solaris,、HP-UX,、Tru64和IRIX,,甚至其它的Unix平台,在MicrosoftWindows上也跑得很好。当然,并不能像Java那样“一次编译,到处可以运行”,当移植到其它平台时,一般来说是需要重新编译的。
接着,我们来说说Xapian的特性
依官方的说法,Xapian是一个允许开发人员轻易地添加高级索引和搜索功能到他们的应用系统的高度可修改的工具,它在支持概率论检索模型的同时也支持布尔型操作查询集。
从功能特性上来说。Xapian和Lucene有点相似,两者都具有Term、Value(在Lucene里称为SortField)、Posting、Position和Document,不过Xapian没有Field的概念,这直接导致Xapian在使用上比Lucene麻烦了那么一点。但这完全不是问题,通过一些小技巧,完全可以自己在Xapian中实现Filed的概念。在Lucene里还有一个叫Payload的元素,即词条(Term)的元数据或称载荷。举一个例子,“回家吃饭吧”和“快回家吃饭”这两个句子都带有“吃饭”这个词语,但在检索的时候怎样才能将语气表达出来呢?虽然可以添加Term来解决这个问题,但由于Term的索引信息和存储信息是分开放的,相对来说I/O性能较差,Payload就是应这个问题而生的,因为Payload信息是直接放在索引里的。由于对Xapian的研究还不是很深,Xapian里是否有类似Payload这个概念,还需要继续研究。
次之,我们来看看Xapian与搜索的关系
搜索的目的是将结果数据展现给终端用户,搜索引擎与普通的数据库查询最大的区别就在于查询。Xapian提供了多种的查询机制。
概率性搜索优化排名–重要的词语会比不那么重要的词语得到更多的权重,因此与权重高的词语关联的Documents会排到结果列表的更前面。
相关度反馈–通过给予一个或多个Documents,Xapian可以显示最相关的Terms以便扩展一个Query,及显示最相关的Documents。
词组和邻近搜索--用户可以搜索一个精确短语或指定数组的词组。
全方位的布尔型搜索器,例如("stockNOTmarket",etc)。
支持提取搜索关键字的词干,例如当搜索“football”的时候,当Documents中含有"footballs"或"footballer"的时候也被认作符合。这有助于找到相关结果,否则可能错过之。词干提取器现在支持Danish、Dutch、English、Finnish、French、German、Hungarian、Italian、Norwegian、Portuguese、Romanian、Russian、Spanish、Swedish和Turkish。
支持通配符查询,例如“xap*”。
支持别名查询,打个比方,C++会自动转为CPlusPlus,C#则自动转为CSharp。
Xapian支持拼写纠正,例如xapian会被纠正为xapain,当然这必须基于词组已经被索引了。这特性跟Google提供的“你是不是想搜索xxx”有点相似。
这里又要说到一个概念Xapian的存储系统
Xapian现在的版本默认是使用flint作为存储系统,flint是以块的形式来存储,默认每块是8K,理论上每一个文件最大可以达到2048GB。当然,在旧式的文件系统,例如FAT/FAT32是不可能实现的。熟悉Windows内存管理机制的朋友一定知道使用Windows32位系统每个进程的总虚拟地址空间只有4GB,而用户模式连2GB都不够(Windows2003可以将用户模式扩展到3GB左右),因此应用程序不可能一次过将整个Database文件读取到内存中,通常的做法是使用内存映射文件,先预订地址空间,在真正使用的时候才调拨内存,而内存分页粒度是4k,也就是说内存中每一页是4k,而在IA64系统中,内存分页粒度是8k。在内存中,除了页外,还有区块,X86和IA64的内存区块的粒度都是64k。Xapian这样存储数据估计是为了在各个平台上都能实现数据对齐,数据对齐对于cpu运算寻址是非常重要的,而8和64都是4的倍数,因此大胆猜想Xapian以8k作为存储系统的默认块大小是为了在性能和兼容性中取得最平衡和最优值。
Xapian使用unsigned32-bitints作为Documents的id值,因此在每个Xapian的Database中,最多可容纳40亿个Documents。而Xapian的Terms和Documents都是使用B-树来存储的,其实很多数据库系统(这里所指的是关系数据库)的索引都是用B-树或B+树来存储的,具有增删改查比较方便迅速的特点,缺点则是如果索引被删除后的空间不能重复利用,为了提高性能,通常要经常重建索引。
那么,Xapian的性能怎么样呢?
搜索引擎的性能是用户非常关心的一部分,Xapian的性能如何?
官方的原话如下:Theshortansweris"verywell"-apreviousversionofthesoftwarepoweredBrightStation'
sWebtopsearchengine,whichofferedasearchoveraround500millionwebpages(around1.5terabytesofdatabasefiles).
Searchestooklessthanasecond。
翻译过来的意思就是:在5亿个网页共1.5TB大小的文件中,搜索只需要小于一秒就完事了。当然,这跟运行的平台和机器是密切相关,在我们自己构建好Xapian搜索引擎应用后,我们也可以测测具体的速度。
最后,我们来说说Xapian的绝佳范例
Xapian的官方网站上有一个绝佳的使用范例,这个称为Omega的项目甚至可以开箱即用作为一个CGI应用程序。Omega附带了Omindex和ScriptIndex这两个索引生成工具,可以将硬盘上的html,pdf,图片甚至视频影片索引起来并生成Database,通过操作这些由Omindex或ScriptIndex生成的Database,Omega提供了搜索这些文件的功能。
总结,在使用Xapian的过程中,小编一般是先查阅http://www.xapian.org/docs/上的Doc、APIDoc和Wiki,遇到困难时则再查阅Omega的源代码并互相印证之。实在没办法的时候只能从Google上找找一些网站的邮件列表,可以说是磕磕碰碰地将Xapian的大部分功能玩了一遍。但是有一些专有名词小编虽然知道大概意思,但无法准确地翻译出来,因此《利用Xapian构建自己的搜索引擎》这篇文章的内容可能会错漏百出。不过如果这篇文章可以对大家有所帮助的话,它所得到的批评才是它最大的价值。创新互联的小编将继续为大家发掘更多更好地建站知识。
- 上一篇文章:网站建设应该避免的错误
下一篇文章:跳出率和退出率详解
优化电话:028-86922220 13518219792 公司地址:成都市太升南路288号锦天国际A幢1002号
支持信箱:service@cdxwcx.com 版权所有:创新互联-供最优势的搜索引擎排名优化 蜀ICP备13010860号
创新互联成都网络公司:成都网站推广,内容页排名推广,成都网站建设,成都网页制作,成都网页设计,更新网站内容