使用xunsearch进行php全文检索

网极科技2年前代码笔记795

迅搜(xunsearch)是采用 C/C++ 基于 xapian 和 scws 开发的全文搜索引擎解决方案,适用于php全文检索、mysql全文检索和各种站内搜索。支持海量数据高速检索,功能强大、简单易用、开源免费!

xunsearch程序包下载

  • 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服务端只支持Linux服务器,我们通过在服务器执行命令进行下载Xunsearch并进行解压

    检测 PHP-SDK 的运行条件

从现在开始的文档及示范代码中我们都假定您将 xunsearch 安装在 $prefix 目录中,而不再另行说明。

基础运行条件要求 PHP 最低版本为 5.2.0,随着功能需求的不同可能还会用到一些其它扩展,具体请在 命令行环境里运行我们提供的检测脚本。如果您的 php 可执行文件不在默认搜索路径中,假设是安装在 /path/to/bin/php 请使用第二种方式运行。运行方式如下:

$prefix/sdk/php/util/RequiredCheck.php
/path/to/bin/php $prefix/sdk/php/util/RequiredCheck.php
$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
  • 解压完成后,我们可以看到在当前目录有xunsearch-full-x.x.xx的目录,我们进入此目录,并执行安装操作。如下命令

  • cd xunsearch-full-1.4.14
    sh setup.sh
  • 安装时间较长,请耐心等待安装完成。

  • 启动服务

  • 当安装完成Xunsearch后,我们可以通过以下命令进行启动服务

  •  cd xunsearch-full-1.4.14
    cd bin
    ./xs-ctl.sh start
  • 重启服务

  • 如果我们需要重启Xunsearch服务,我们可以通过以下命令进行重启服务

  •  cd xunsearch-full-1.4.14
    cd bin
    ./xs-ctl.sh restart
  • 停止服务

  • 如果我们需要停止Xunsearch服务,我们可以通过以下命令进行停止服务

  • cd xunsearch-full-1.4.14
    cd bin
    ./xs-ctl.sh stop
  • 停止服务

  • 如果我们需要停止Xunsearch服务,我们可以通过以下命令进行停止服务

  • cd xunsearch-full-1.4.14
    cd bin
    ./xs-ctl.sh stop

相关文章

明道云集成我司API接口范例

明道云集成我司API接口范例

有个客户购买了我司的智能快递地址解析接口,需要集成到明道云系统,所以写这个教程帮助大家。 第一步,在明道云创建如下表单其中第二个解析地址查询按钮为:左侧组件–高级–API查询 第二步,在集...

私有化部署PaddleOCR图片中文字识别

私有化部署PaddleOCR图片中文字识别

图片文字识别(OCR)的技术目前已经比较成熟,有很多开源模型可以使用。本文主要以百度开源的PaddleOCR为例,进行私有化部署 为什么要进行文字识别私有化很多图片是比较隐私的,比方身份证,虽然市面...

使用Cloudfare R2云存储替代阿里云腾讯云存储_使用php进行Cloudfare R2存取操作

使用Cloudfare R2云存储替代阿里云腾讯云存储_使用php进行Cloudfare R2存取操作

Cloudfare主要是做全球CDN加速,他的存储R2功能只计算存储和请求费用,不计算流量费用,这点在目前云存储市场上算是独一无二了。比如我们常用的阿里云,他OSS云存储主要构成是流量费用。然后我们看...

为什么要用ServerLess架构部署企业官网

为什么要用ServerLess架构部署企业官网

企业官网作为企业的重要对外门户,承载的功能不然而喻。 企业官网经常遇到的问题被攻击很多非技术企业对于网站的运维并不擅长,更加没有专业的工程师进行运维,遇到攻击,手足无措,只能眼睁睁看着网站打...

fastadmin对接火车头采集器

fastadmin对接火车头采集器

fastadmin默认没有对接火车头采集器,本文介绍下对接方法: 1、创建获取栏目列表api 因为cms扩展应用中api获取栏目列表需要post提交apikey,在火车头中不支持使用,所以重新创建...

https网页无法加载http的文件,给html头部添加一段代码搞定

https网页无法加载http的文件,给html头部添加一段代码搞定

在强制要求https协议的情况下,一年一签的SSL很多时候忘记续签,导致成为http协议,进而引发文件加载不到的问题 https与http能否共存https地址中,如果加载了http资源,浏...