Laravel 使用 xunsearch(迅搜)全文检索引擎,已放弃

目前使用的全文检索引擎解决方案是 laravel-scout-tntsearch,但是因为该方案使用的是用 SQLite 作为数据存储,当我测试文章超过5000篇以上之后,文章保存时间会越来越慢。

所以迫切需要一个轻量级但是又比较效率的全文检索方案。之所以不考虑 Elasticsearch 就是因为 ES 太重量级了,没必要,毕竟为了以后网站搬家方便。

需求背景就是如此了。

之所以选择迅搜,官方是这样介绍的

迅搜后端是采用 C/C++ 开发多线程服务端,索引设计基于 Xapian 和 scws 中文分词。单库最多支持 40 亿条数据,在 5 亿网页大约 1.5TB 的数据中检索时间不超过 1 秒(非缓存)。

迅搜Xunsearch安装教程 www.xunsearch.com/doc/php/guide/sta...

接入Laravel 步骤

  1. 使用的是 taxusorg/xunsearch-laravel 扩展包,github.com/taxusorg/xunsearch-lara...
    注意:该扩展包限制 laravel/scout 为 6、7、8,最新的 laravel/scout 大版本号已经是9了
    composer require taxusorg/xunsearch-laravel
    php artisan vendor:publish --provider="Taxusorg\XunSearchLaravel\XunSearchServiceProvider"
    .env 文件中设置
    SCOUT_DRIVER=xunsearch
  2. 安装 laravel/scout,因为taxusorg/xunsearch-laravel的限制故需指定版本
    composer require laravel/scout 8.*
  3. 修改配置
  4. 启动 xunsearch,前提必须自行安装了,这里是默认安装路径启动
    如果不是本机调用,需绑定ip启动迅搜
    # 重启迅搜
    /usr/local/xunsearch/bin/xs-ctl.sh restart
    # 启动迅搜
    /usr/local/xunsearch/bin/xs-ctl.sh start
    # 停止迅搜
    /usr/local/xunsearch/bin/xs-ctl.sh stop
    # 绑定IP启动,不绑定IP,则默认绑定 127.0.0.1 仅限本地访问
    # 0.0.0.0 表示任意ip均可访问
    /usr/local/xunsearch/bin/xs-ctl.sh -b 0.0.0.0 start
  5. 编写demo,测试
    # 建立索引
    php artisan scout:import "App\Models\ApiArticle"
    # 刷新索引
    php artisan scout:flush "App\Models\ApiArticle"
    # 测试代码 接收get参数 $s 并查找
    $s = $request->get('s');
    $list =ApiArticle::search($s)
    ->paginate()
    //  ->get()
    ->toArray();
    dd($list);

    已放弃

    从入门到放弃只有半天时间
    放弃原因
  6. 分页问题,没法和laravel的模型分页兼容
  7. 条件搜索的话也是问题
  8. 精细化设置的话,文档很难得找

Centos8 安装Xunsearch失败的问题

错误日志描述如下

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

解决方法
首先,先去下载一下2.1.X版本的libevent安装包,可以直接搜索libevent,然后在官方的网站上下载,很多时候官方的链接是github上的,如果直接在linux系统上用wget下载有点慢,这种情况下可以先在咱们自己的浏览器上下载好,再通过winscp上传上去,更加快。
我下载的版本是libevent2.1.12,下载链接是:github.com/libevent/libevent/relea...

下载好后上传到服务器上放xunsearch的目录下,我的目录是/usr/local/src/,然后将这个文件解压,并重新压缩成bz2格式,参考代码如下:

//先将libevent解压(以便压缩成所需格式)
tar -zxvf libevent-2.1.12-stable.tar.gz
//压缩成bz2格式,这是迅搜安装包的支持的格式
tar -cjf libevent-2.1.12-stable.tar.bz2 libevent-2.1.12-stable
//复制到xunsearch下的packages文件夹内
cp libevent-2.1.12-stable.tar.bz2 xunsearch-full-1.4.15/packages/
//进入安装包的目录并将原来自带的libevent安装包删除(xunsearch1.4.15自带的是2.0.X)
cd xunsearch-full-1.4.15/packages/
rm -f libevent-2.0.X
//返回上一步的文件夹(即迅搜安装包的根目录),然后执行setup.sh就可以了,
//迅搜会自动检查安装包文件内的libevent开头的安装包,如果没找到会报错,如果找到了就会自动解压并编译安装
cd ..
./setup.sh

解决方法来着风柏杨,感谢风柏杨的文档帮助:blog.csdn.net/one_and_only4711/art...

相关参考链接

taxusorg/xunsearch-laravel: github.com/taxusorg/xunsearch-lara...

Xunsearch 权威指南: www.xunsearch.com/doc/php/guide/ini...

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

随时想着搬家的事情

2年前 评论
木大大 (楼主) 2年前

推荐MeiliSearch xunsearch该扫进垃圾堆了 官方sdk连composer包都一堆问题 无力吐槽

2年前 评论
木大大 (楼主) 2年前
木大大 (楼主) 2年前

CentOS 也尽量换成其他的吧

2年前 评论

建议还是用ES

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!