多语言展示
当前在线:1934今日阅读:155今日分享:35

如何搭一个搜索引擎:[1]xapian篇

随这几年互联网技术的发现,其实搜索引擎早已不像10年前那样高深莫测了,其实无非就是爬虫、倒排索引、检索结果归并、排序、query分析等操作。核心功能也有不少开源代码,理论上,对于索引量几百万以内的,需求不太复杂的,这些开源搜索引擎都可以轻松胜任,也不需要做太多修改。    前不久花了点时间学习了一下xapian,并用它搭了一个搜索引擎,最近正好想在一台机器上实验一些东西,想重新搭个环境,折腾了一上午,虽然有些细节,但整体上还是比较轻松地把引擎搭了起来。
工具/原料
1

装有Linux系统的电脑一台

2

xapian开源软件包

方法/步骤
2

2. xapian简介及资料   具体看官网的文档 http://xapian.org/docs/ 文档写得不错,可以认真研究一下。   中文里面,这个系列也不错:http://blog.csdn.net/visualcatsharp/article/details/4176021   xapian主要包括:建索引(indexer)、检索(searcher)、排序(ranker)、引擎数据存储(database)等主要功能。   注意:没有spider功能,这个也有很多开源的工具。         没有自带分词功能,需要再找个开源分词软件,后面选择mmseg,整体感觉好一些。

3

3. 软件安装   环境:centos6.2 64位   安装如下几个软件:xapian核心包:xapian-core-1.2.12.tar.gzxapian应用包:xapian-omega-1.2.12.tar.gz开源分词软件:mmseg-3.2.14.gz    几个依赖包安装(如果还缺什么包的话再装):yum install libuuid-develyum install pcre-develyum install automakeyum install libtool   xapian安装比较简单,看系统INSTALL文件,几步搞定   mmseg安装,先把几个工具安装好后运行./bootstrap;再运行./configure和make make install什么的   xapian-omega安装也还行,继续看INSTALL文件搞定     注意:不想安装到系统默认位置的话,可以通过 './configure --prefix=路径'  设定路径

4

4. 程序修改   修改omega程序,增加分词功能,主要修改这几个文件:新增:seg.hseg.cc 分词函数封装,调用mmseg库修改:Makefile 改一些编译依赖omega.h  包含seg.h头文件omega.cc 在g = cgi_params.equal_range('P');下面直接对query_string加入分词功能scriptindex.cc 在建索引的工具里面加入分词功能;在case Action::INDEX下面加入分词功能query.cc 这个修改主要是美观些,在检索时,显示的原始查询串不会被分词(可以不改)   改好后,重新make clean;make;make install一下,就基本万事俱备了

5

5. 索引数据   网上抓一些网页,把title、url、content什么的提取出来,整成这种格式:url=XXXtitle=XXXcontent=XXX   两个doc之前空行隔开   配置script脚本,有一个现成的可以改改,参考http://xapian.org/docs/omega/文档里面说明    运行scriptindex程序,把索引建起来

6

6. 搭环境   把httpd什么的环境搭一下,需要支持cgi-bin的(默认好像一般都支持)   omega程序是最终的可执行cgi-bin程序,还有一些网页模板文件(template/)、分词配置和词典,以及scriptindex生成的索引数据文件,拷到cgi-bin目录下,细节的地方再改改,基本就可以运行起来了。   注意cgi-bin下面程序的执行权限,http的访问好像是属于apache用户,这样omega依赖的libxapian.so.22动态库所有路径apache用户没有权限访问,最简单的办法是把libxapian.so.22拷到/lib64下面(如果原来就安装到系统目录下,那就不用拷了)   把一些配置什么的改改,基本上就可以了。

7

总结,当时实际看的时候,我把xapian的一些接口函数都认真看了一下,简单研究了一下索引结构和排序方法,xapian是有词的offset信息的,但在排序时用了bm25算法,没有把offset对排序的影响加进去,但这些信息都是可以在检索时取到的(有一些term posting什么的),所以理论上可以对排序方法作更多扩展。不过这些用法偏高级了,如果不是专门从事搜索引擎相关的,基本也不会用到,基本的功能也就满足了80%的需求了。

推荐信息