一、参照迅搜(XunSearch)官方文档,安装好迅搜(XunSearch)服务端

  1. 官方文档链接地址:http://www.xunsearch.com/doc/php/guide/start.installation
  2. 安装过程中如果报类似下面的libevent错误,请参考文档:http://www.cmswiki.eu.org/?id=11
    bufferevent_openssl.c:237:2: note: (near initialization for 'methods_bufferevent')
    bufferevent_openssl.c:228:19: error: storage size of 'methods_bufferevent' isn't known
     static BIO_METHOD methods_bufferevent = {
                       ^~~~~~~~~~~~~~~~~~~
    make[2]: *** [Makefile:793: bufferevent_openssl.lo] Error 1
    make[2]: Leaving directory '/usr/local/src/xunsearch-full-1.4.14/libevent-2.0.21-stable'
    make[1]: *** [Makefile:857: install-recursive] Error 1
    make[1]: Leaving directory '/usr/local/src/xunsearch-full-1.4.14/libevent-2.0.21-stable'
    make: *** [Makefile:1182: install] Error 2
    
  3. 安装之后如果设置启用/etc/rc.local开机启动失败,请参考文档:http://www.cmswiki.eu.org/?id=13

二、从应用市场安装好插件

三、插件设置

  1. 安装好插件之后,进入配置管理页面,设置好索引名称,服务器和勾选索引字段等参数,保存配置。
    关于字段索引这里说明一下,参考下面的图片
    如果想在全文搜索中可以搜索到,必须做混合区索引
    如果要指定字段搜索,必须选字段索引
    如果想要全文和字段都可以搜索到,请选择字段和混合区索引
    其他不做搜索查询,只用于展示的字段就选不做索引
    
    {cms_img_title}
  2. 数据导入,在这里导入现有网站数据到索引库,配置错误索引结果不满意,也可以在这里删除索引,重新导入数据。
    {cms_img_title}
  3. 索引数据管理,在这里可以查看和删除已在索引库的内容。
    {cms_img_title}
  4. 自定义词库管理,如果对系统自带词库的分词不满意,可以尝试在这里扩展自己的自定义词库。
    首先新增分类,然后添加对应的词条
    {cms_img_title}
  5. 同义词管理,在使用同义词搜索的时候请在这里添加好同义词词库操作方法和自定义词库一样。
    {cms_img_title}
    敏感词词库管理,如果开启了禁用词禁止搜索,需要在这里配置敏感词词库,出现在列表里面的词语都不允许提交搜索,添加方法和自定义词库一样,先添加分类,然后添加词语。
    {cms_img_title}
    {cms_img_title}
到这里,我们的插件已经可以正常使用了,可以打开前台页面体验一下。

前台搜索框URI:【你的域名】index.php?s=zyl_xunsearch&c=home&m=index

{cms_img_title}

{cms_img_title}

四、使用系统钩子,增删改自动同步索引

把下面的钩子代码添加到系统config/hooks.php文件

/**
迅搜全文搜索代码 begin
*/
//模块内容发布之后
\Phpcmf\Hooks::on('module_content_after', function ($data, $old) {
    try {
        $postdata = array_merge($data[1], $data[0]);
        $postdata['dirname'] = APP_DIR;
        // 内容发布或者修改之后
        if ($data[1]['status'] == 9) {
            // 9表示审核通过的
            \Phpcmf\Service::L('ZylXunsearch', 'Zyl_xunsearch')->document_update($postdata);
        } else {
            // 其他状态 删除索引文档
            \Phpcmf\Service::L('ZylXunsearch', 'Zyl_xunsearch')->document_delete($postdata);
        }
    } catch (Throwable $e) {
    }
});

//模块内容审核处理之后
\Phpcmf\Hooks::on('module_verify_after', function ($data) {
    //$data 模块审核表的数据
    // MOD_DIR 表示模块目录
    try {
        $data['dirname'] = MOD_DIR;
        if ($data['status'] == 9) {
            // 9表示已经通过了,这里记录一下是谁审核通过的
            \Phpcmf\Service::L('ZylXunsearch', 'Zyl_xunsearch')->document_update($data);
        } else {
            // 其他状态 删除索引文档
            \Phpcmf\Service::L('ZylXunsearch', 'Zyl_xunsearch')->document_delete($data);
        }
    } catch (Throwable $e) {
    }
});

//模块内容删除/回收站之后
//用于后台加入回收站之后、用户中心删除内容之后的操作
\Phpcmf\Hooks::on('module_content_recycle', function ($data) {
    //$data 模块表的数据
    // MOD_DIR 表示模块目录
    try {
        $data['dirname'] = MOD_DIR;
        //删除索引文档
        \Phpcmf\Service::L('ZylXunsearch', 'Zyl_xunsearch')->document_delete($data);
    } catch (Throwable $e) {
    }
});

//用于后台从回收站中删除之后的操作(彻底删除)
\Phpcmf\Hooks::on('module_content_delete', function ($data) {
    //$data 模块表的数据
    // MOD_DIR 表示模块目录
    //有可能前面到回收站的时候已经删除了,所以这里做容错处理
    try {
        $data['dirname'] = MOD_DIR;
        //删除索引文档
        \Phpcmf\Service::L('ZylXunsearch', 'Zyl_xunsearch')->document_delete($data);
    } catch (\Throwable $e) {
    }
});
/**
迅搜全文搜索代码 end
*/
到此,我们插件已经能正常工作了。
文档最后更新时间:2023-05-20 17:08:36
文档作者:知行工作室 不会操作怎么办?