一、项目的配置文件
1、要想使用xunsearch,首先需要进行配置文件的配置。
默认目录在app下,如下面的结构,每一个搜索项目都需要有一个ini文件进行相应的配置。
举例:
project.name = novel
project.default_charset = utf-8
server.index = 8383
server.search = 8384[novel_id]
type = id[title]
type = title[author_name][description]
type = body[last_time]
type = date
2、每个字段用一个区段配置来表示,中括号内的名字即为字段名。每个项目包含若干个字段,具体由项目搜索需求决定,并不需一味的与实际源数据库 (如 MYSQL) 一致,而只需要设计搜索功能所涉及的字段即可。
3、这里为了安全起见,我同样对查询出的数据起了别名,进而一一对应xunsearch中ini文件定义的字段(第三部分可以看到)。
chm手册下载地址:http://www.xunsearch.com/site/download/xs_php_manual.chm
建议如果初次使用xunsearch,则从手册最开始跟着操作一遍。尤其是新手上路部分。
注:在线生成编辑配置文件ini http://www.xunsearch.com/tools/iniconfig
二、生成骨架文件【建议最好执行这步,节省很多开发时间】
文档地址:http://www.xunsearch.com/doc/php/guide/util.skel
三、从数据库查询出需要的数据,并且将数据添加到xunsearch索引数据库
这里,我是在我外层定义了一个php文件来完成添加数据到XunSearch索引数据库的操作,代码如下
<?php
//require '/data/xun/lib/XS.php';
require './lib/XS.php';$XS = new XS('novel');// 建立 XS 对象,项目名称为:novel
$index = $XS->index; // 获取 索引对象//创建pdo对象,并从表中读出需要的数据
$dsn = "mysql:dbname=test;host=127.0.0.1";
$pdo = new PDO($dsn,'root','123456');
$sql = "select comic_id as novel_id,name as title,pen_name as author_name,description,last_verify_time as last_time from front_comic";
$stmt = $pdo->query($sql);
$data = $stmt->fetchAll(2);//循环添加数据到XunSearch索引库
foreach ($data as $v){// 创建文档对象$doc = new XSDocument();$doc->setFields($v);// 添加到索引数据库中$res = $index->add($doc);
}$res = $res ? 'success' : 'fail';
echo $res;
执行a.php文件,则从数据库查询出来的数据就添加到XunSearch索引数据库中了。
四、演示效果
这里,访问之前我们生成的对应的骨架文件就可以看到效果了。
到这里,基本的全文检索就已经实现了。
总结:
1、XunSearch全文检索的原理就是将mysql数据库中的我们需要的数据查询出来,并一一对应的添加到XunSearch的索引数据库中,然后,用户在前端查询的时候,就直接查询的是Xunsearch索引数据库中的内容了。这样,可以说速度就变得非常非常快了。
2、在项目中引入XunSearch或者sphinx等全文检索工具,则会大大降低mysql的压力,并且能够更快速的检索出用户需要的数据,无疑体验会更加好。
3、XunSearch索引数据库的文件默认存储在/usr/local/xunsearch/data/项目名 中,每一个项目有自己独立的一个存储库,如下:
4、进入novel项目的存储库,我们可以看到三个文件,一个是存储数据的,一个是存储日志的,一个是存储搜索记录的
值得注意的是:在测试演示效果的时候,由于xunsearch数据库并不是你这边刚提交完,那边数据就直接更新了,而是异步的(默认大概每两个小时才更新一次),所以,为了更快速的看到效果,我们需要手动去刷新,如下:
util/Indexer.php --flush-log novel