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

2026-01-02 23:54:26

1、1. 关于开源搜索引擎

    随便百度一下,好多开源搜索引擎,像lucene,sphinx还有一些人专门比较了每种搜索引擎的优缺点。

    开源搜索引擎列表:http://www.oschina.net/project/tag/130/search-engine

    xapian是C语言写的,本篇先介绍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.gz

xapian应用包:xapian-omega-1.2.12.tar.gz

开源分词软件:mmseg-3.2.14.gz 

   几个依赖包安装(如果还缺什么包的话再装):

yum install libuuid-devel

yum install pcre-devel

yum install automake

yum install libtool

   xapian安装比较简单,看系统INSTALL文件,几步搞定

   mmseg安装,先把几个工具安装好后运行./bootstrap;再运行./configure和make make install什么的

   xapian-omega安装也还行,继续看INSTALL文件搞定

   

  注意:不想安装到系统默认位置的话,可以通过 "./configure --prefix=路径"  设定路径

4、4. 程序修改

   修改omega程序,增加分词功能,主要修改这几个文件:

新增:

seg.h

seg.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=XXX

title=XXX

content=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%的需求了。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢