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 步骤
- 使用的是
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
- 安装 laravel/scout,因为taxusorg/xunsearch-laravel的限制故需指定版本
composer require laravel/scout 8.*
- 修改配置
- 启动 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
- 编写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);
已放弃
从入门到放弃只有半天时间
放弃原因 - 分页问题,没法和laravel的模型分页兼容
- 条件搜索的话也是问题
- 精细化设置的话,文档很难得找
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 协议》,转载必须注明作者和本文链接
随时想着搬家的事情
推荐MeiliSearch xunsearch该扫进垃圾堆了 官方sdk连composer包都一堆问题 无力吐槽
CentOS 也尽量换成其他的吧
建议还是用ES