在数据中心一直想实现全文搜索功能,之前的想法一直是基于FTS在postgresql数据库下构建全文搜索,但最近发现了xunsearch,感觉其功能不错,就尝试在数据中心中使用。
xunsearch简单介绍:
帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。全文检索可以帮助您降低服务器搜索负荷、极大程度的提高搜索速度和用户体验。
高性能:后端是采用 C/C++ 开发多线程服务端,索引设计基于 Xapian 和 scws 中文分词。单库最多支持 40 亿条数据,在 500 万网页大约 1.5TB 的数据中检索时间不超过 1 秒(非缓存),参见 Scalability。
简单易用:前端是使用脚本语言编写的开发工具 (SDK),目前支持 PHP 语言。API 简单清晰,开发难度极低,提供全中文的示例代码、文档、辅助脚本工具等。
全功能:除支持基础的自定义分词、字段检索、布尔搜索外,还直接支持用户急需的相关搜索、拼音搜索、搜索建议等专业功能,详见 功能特色。
使用方法:
1. 下载安装
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 tar xjvf xunsearch-full-latest.tar.bz2 sudo apt-get install uuid-dev zlib1g-dev setup.sh
我是安装在家目录下的,即~/xunsearch。
然后重启xunsearch服务:
~/xunsearch/bin/xs-ctl.sh restart
2. 制作初步的工程文件
直接根据默认的demo.ini来制作一个新的工程文件。最简单的如下:
project.name = westdc project.default_charset = utf-8 server.index = 8383 server.search = 8384 [uuid] type = id [title] type = title [data] type = body [description] type = string
3. 添加PostgreSQL数据库支持
因为默认的xunsearch暂时不支持PostgreSQL数据库,需要扩展XSDataSource.class.php类,在其最后增加一个类:
class XSDatabasePDO_PgSQL extends XSDatabasePDO { /** * 生成 PgSQL DSN * @param array $param 包含 host, port, dbname * @return string */ protected function makeDsn($param) { $dsn = 'pgsql:host=' . (isset($param['host']) ? $param['host'] : 'localhost'); if (isset($param['port']) && $param['port'] != 5432) $dsn .= ';port=' . $param['port']; $dsn .= ';dbname=' . $param['dbname']; $dsn .= ';user=' . $param['user']; if (isset($param['password'])) $dsn .= ';password=' . $param['pass']; return $dsn; } }
3. 创建索引
可以使用如下命令创建索引:
util/Indexer.php -p westdc --rebuild --source=pdo.pgsql://user:password@localhost/metadata --sql="select m.uuid,m.title,m.description,x.data from metadata m left join xml x on m.id=x.id"
4. WEB接口实现
可以使用骨架工具进行初步的试验:
util/SearchSkel.php -p westdc
这样就在当前目录下生成了一个westdc目录,其下有三个文件,及search.php、search.tpl以及suggest.php,可以将这三个文件拷贝到数据中心的web目录下,然后访问即可以看到效果。
5. 工程文件的增强
project.name = westdc project.default_charset = utf-8 server.index = 8383 server.search = 8384 [uuid] type = id tokenizer = full [title] type = title [description] type = string cutlen = 300 weight = 3 phrase = yes index = both [data] type=body cutlen = 300
其次,搜索代码可以整合到现有数据中心的体系中来以方面更好的系统调用。
6. xunsearch服务启动后自动运行
在ubuntu中修改/etc/rc.local,在”exit 0“前面添加一行:
nohup sudo -u user -i /home/user/xunsearch/bin/xs-ctl.sh restart &
发表回复