试用 xunsearch 全文检索

近几天一直在测试sphinx/coreseek的分词和全文检索的解决方案,sphinx应用的案例比较多,它所提供的接口也比较丰富。昨日接触了一下xunsearch,有点眼前一亮的感觉,相比前者虽然目前只提供php sdk的使用,但是在使用上更友好,文档更规范,从应用上更加减少了开发成本。
xunsearch是SCWS延伸的一个项目,SCWS基于php的分词还是以前在写小项目中使用过,xunsearch也是最近正式发布的,也希望能延续下去。
其官网 www.xunsearch.com 上的文档很详细,安装也做得比较傻瓜,使用前可以浏览看看。
以这个WP的mysql为基础做了一个全文检索的范例: http://www.heinet.cn/wp1998/search.php
安装完成之后启动xs,建立一个项目配置文档:

#检索项目名称
project.name = wp1998
#默认字符集
project.default_charset = utf8
#索引服务器地址端口
server.index = 8383
#检索服务器地址端口
server.search = 8384
#[ID]是WP中的post唯一ID字段,一般把这种字段作为主键
#这里[]定义的字段名是mysql中的原字段名,而type定义的是对应xunsearch的类型
#当然立刻用其他名称,不过需要在select中做转义
[ID]
#id表示主键类型
type = id
#[post_title]是WP中的post标题,定义为title类型,是可以检索的字段
[post_title]
type = title
#[post_content]是WP中的post内容,定义为content类型,是可以检索的字段
#cutlen定义摘要的长度,单位字节
[post_content]
type = body
cutlen = 400
#[post_time]是WP中的post发布时间,定义为numeric(数值型),主要用于排序或区间检索
[post_time]
type = numeric

配置文件完成之后,通过脚本工具把目前的所有post导入建立索引:
# /data/app/php/bin/php ./sdk/php/util/Indexer.php –source=mysql://user:passwd@xx.xx.xx.xx/wp_database/wp_posts –sql=”select ID,post_title,post_content,UNIX_TIMESTAMP(post_date) as post_time from wp_posts where post_status=’publish’ and post_type=’post’” -p wp1998
然后就可以检索查询了,用xunsearch的自动发布工具发布了一个实例页:
http://www.heinet.cn/wp1998/search.php
为了让索引随着post发布更新索引库,需要在post发布时增加一些处理,xunsearch提供了比较丰富的php操作函数

$data = array(
 'ID' => 234, //字段为主键,必须指定
 'post_title' => '测试文档的标题',
 'post_content' => '测试文档的内容部分',
 'post_time' => time()
 );
 // 创建文档对象
 $doc = new XSDocument;
 $doc->setFields($data);
// 添加到索引数据库中
 $index>add($doc);

总体来说,挺傻瓜的,但是这项目发布不久还是有bug的,测试的时候就遇到了一些,不过还不伤大局。

发表评论