使用xunsearch进行php全文检索
迅搜(xunsearch)是采用 C/C++ 基于 xapian 和 scws 开发的全文搜索引擎解决方案,适用于php全文检索、mysql全文检索和各种站内搜索。支持海量数据高速检索,功能强大、简单易用、开源免费!
xunsearch可以独立于项目部署,不受项目的影响,索引的建立可以直接从数据库源建立,需要调用搜索的地方,加载他的方法就可以了。
安装好服务端后,找到phpsdk 在安装目录
/sdk/php
即是 PHP-SDK 的代码目录。目录结构
|- doc/ 离线 HTML 版相关文档 |- app/ 用于存放搜索项目的 ini 文件 |- lib/XS.php 入口文件,所有搜索功能必须且只需包含此文件 \- util/ 辅助工具程序目录 |- RequireCheck.php 用于检测您的 PHP 环境是否符合运行条件 |- IniWizzaard.php 用于帮助您编写 xunsearch 项目配置文件 |- Quest.php 搜索测试工具 \- Indexer.php 索引管理工具
app中示例项目配置:
project.name = demo project.default_charset = utf-8 server.index = 8383 server.search = 8384 [id] type = id [title] type = title [update_time] type = numeric
id,title,update_time都与数据库中表字段对应一致
然后使用sql语句进行索引导入:
# 导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建 util/Indexer.php --rebuild --source=mysql://root:pass@localhost/dbname --sql="SELECT * FROM tbl_post" --project=demo
如果数据量很大,这个过程就会很久,导入完成后,即可使用如下方式进行检索测试:
// 加载 XS 入口文件 //echo ROOT_PATH . '/so/lib/XS.php'; require_once ROOT_PATH . '/so/lib/XS.php'; // // 支持的 GET 参数列表 // q: 查询语句 // m: 开启模糊搜索,其值为 yes/no // f: 只搜索某个字段,其值为字段名称,要求该字段的索引方式为 self/both // s: 排序字段名称及方式,其值形式为:xxx_ASC 或 xxx_DESC // p: 显示第几页,每页数量为 XSSearch::PAGE_SIZE 即 10 条 // ie: 查询语句编码,默认为 UTF-8 // oe: 输出编码,默认为 UTF-8 // xml: 是否将搜索结果以 XML 格式输出,其值为 yes/no //q=会计法&f=title&syn=yes&s=update_time_DESC // variables $q=$subject;//检索词 $p=$_REQUEST['p'];//页码 $res= array();//结果集合 // perform the search try { $xs = new \XS('demo'); $search = $xs->search; $search->setCharset('UTF-8'); if (empty($p) ||!$p) { $p=1; } if (empty($q)) { // just show hot query 显示热搜词 $hot = $search->getHotQuery(); //print_r($hot); } else { // fuzzy search 开启模糊搜索 // $search->setFuzzy(true); // synonym search开启自动同义词搜索功能 //$search->setAutoSynonyms(true); // set query设置默认搜索语句 $f = 'title';//检索字段 $search->setQuery($f . ':(' . $q . ')'); // set sort 设置搜索结果的排序方式 $sf = 'update_time';//排序字段 $search->setSort($sf, false,true);//按排序字段倒序倒序 // set offset, limit //设置页码 $res['data']['page'] = $p = max(1, intval($p)); $n = 10; $search->setLimit($n, ($p - 1) * $n); // get the result // $search_begin = microtime(true); $docs = $search->search();//执行检索 //print_r($docs); $res['data']['itemList'] = array(); $res['code'] = 0; foreach ($docs as $doc){ $tmp = array(); //$tmp['title']= $search->highlight(htmlspecialchars($doc->title)); $tmp['title']= $doc->title; $tmp['id']= $doc->id; if($tmp['id'] ){ $res['code'] = 1; } array_push($res['data']['itemList'],$tmp); } //检索耗时 // $search_cost = microtime(true) - $search_begin; // get other result $res['count'] = $search->getLastCount();//符合条件总共条数 $res['data']['total'] = $search->getDbTotal();//数据库总共条数 } } catch (XSException $e) { $error = strval($e); }
如果您的搜索应用程序和
xunsearch
在同一台服务器,则无需复制任何代码,在开发的时候直接包含 入口文件$prefix/sdk/php/lib/XS.php
即可。代码如下:require_once '$prefix/sdk/php/lib/XS.php';
如果您在其它服务器部署前端搜索代码,请将 SDK 代码整个目录复制到相应的服务器上,但并不要求放到 web 可访问目录,考虑安全性也不推荐这么做。
Note: 对于前端和后端分离的用户来说,当
xunsearch
升级安装后必须重新复制安装后的 SDK 代码 去覆盖,否则可能造成版本不匹配导致错误。只支持 服务器,我们通过在服务器执行命令进行下载 并进行解压
从现在开始的文档及示范代码中我们都假定您将 xunsearch
安装在 $prefix
目录中,而不再另行说明。
基础运行条件要求 PHP 最低版本为 5.2.0,随着功能需求的不同可能还会用到一些其它扩展,具体请在 命令行环境里运行我们提供的检测脚本。如果您的 php
可执行文件不在默认搜索路径中,假设是安装在 /path/to/bin/php
请使用第二种方式运行。运行方式如下:
1. $prefix/sdk/php/util/RequiredCheck.php 2. /path/to/bin/php $prefix/sdk/php/util/RequiredCheck.php 3. $prefix/sdk/php/util/RequiredCheck.php -c gbk
运行结果输出的中文编码默认为 UTF-8
,如果您使用 GBK
环境请在运行命令最后加上 -c GBK
。 运行结果会给出一个可视化的表格说明检测结果,并在最终给出检测结论,告诉您是否符合运行的基础要求。
安装Xunsearch
curl -O http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 tar -xvf xunsearch-full-latest.tar.bz2
解压完成后,我们可以看到在当前目录有
的目录,我们进入此目录,并执行安装操作。如下命令cd xunsearch-full-1.4.14 sh setup.sh
安装时间较长,请耐心等待安装完成。
启动服务
当安装完成
后,我们可以通过以下命令进行启动服务cd xunsearch-full-1.4.14 cd bin ./xs-ctl.sh start
重启服务
如果我们需要重启
服务,我们可以通过以下命令进行重启服务cd xunsearch-full-1.4.14 cd bin ./xs-ctl.sh restart
停止服务
如果我们需要停止
服务,我们可以通过以下命令进行停止服务cd xunsearch-full-1.4.14 cd bin ./xs-ctl.sh stop
停止服务
如果我们需要停止
服务,我们可以通过以下命令进行停止服务cd xunsearch-full-1.4.14 cd bin ./xs-ctl.sh stop