近几天一直在测试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 #2012-5-30 15:28:41是WP中的post发布时间,定义为numeric(数值型),主要用于排序或区间检索 [post_time] type = numeric
配置文件完成之后,通过脚本工具把目前的所有post导入建立索引:
# /data/app/php/bin/php ./sdk/php/util/Indexer.php –source=mysql://user:[email protected]/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的,测试的时候就遇到了一些,不过还不伤大局。