前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel中基于XunSearch的中文搜索解决方案

Laravel中基于XunSearch的中文搜索解决方案

作者头像
无道
发布2019-11-13 14:45:54
2.8K0
发布2019-11-13 14:45:54
举报
文章被收录于专栏:无道编程无道编程

前言

分词搜索始终不是那么好解决,但是基本也有现成的解决方案。在我博客之前的文章我也介绍过Sphinx分词搜索:CentOS7下安装Sphinx 中文分词【PHP+MySQL】

但确实,对中文支持是很不好,不能用不好来形容,应该是很不好。

然后我如今又看了另一解决方案:XunSearch,经过一番测试,虽然达不到我心中最理想的那种状态。但确实也还行。

我的另一项目,懒盘搜索:https://www.lzpan.com/ 没办法,给用户好的体验,用户才记住你的网站。而此类网站,搜索很关键。

如上我搜索win10 1903,效果还行。

本篇文章就来说一下,如何在Laravel中使用XunSearch。

前提说一下:

1、XunSearch需要在Linux服务器安装后台服务

2、XunSearch自带有Sdk,但是和Laravel结合不是很好,所以我们这里推荐一位网友封装的Composer包:https://packagist.org/packages/shaozeming/xunsearch-laravel

但是由于是封装,Xunsearch的部分功能没有实现【也许实现了,但是我不会用,文档也没写。】,但基本的搜索结果,结果条数,耗费时间,新建所有索引,更新一条索引,清空所有索引是实现了的。

以下步骤我们分为服务器端安装XUNSearch,以及在PHP代码端连接服务,新建索引以及搜索,还有如何自动添加新的索引。

安装XunSearch

官网文档地址:http://www.xunsearch.com/doc/php/guide/start.installation

1、下载压缩包,解压

wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
tar -xjf xunsearch-full-latest.tar.bz2

我的建议是在家目录建立一个xun文件夹,进入xun文件夹运行以上代码。如下:

解压完了会有一个文件夹,

进入执行

cd xunsearch-full-1.4.13 # 此命令是进入解压后的目录,由于您看此篇文章时的版本可能有所不同,请根据具体目录进入。
sh setup.sh # 执行安装脚本

配置安装目录

安装完成

如果你是默认安装目录,也即:/usr/local/xunsearch

那么我们进入

cd /usr/local/xunsearch/bin

执行以下命令的一个,根据你的要求执行:

./xs-ctl.sh -b local start    // 监听在本地回环地址 127.0.0.1 上
./xs-ctl.sh -b inet start     // 监听在所有本地 IP 地址上
./xs-ctl.sh -b a.b.c.d start  // 监听在指定 IP 上
./xs-ctl.sh -b unix start     // 分别监听在 tmp/indexd.sock 和 tmp/searchd.sock

由于我是本地服务器,所以我监听本地回环地址即可: ./xs-ctl.sh -b local start

出现以上界面,说明已经监听成功啦,至此服务器端安装xun search完毕。

额外说明的是,腾讯云、阿里云的安全组默认是禁止8383和8384端口的,你们需要在安全组里面打开。

PHP端安装

1、安装composer包

前面说了,我不想在laravel里面用官方配置的SDK,不好兼容。用一位网友封装的SDK。

安装

composer require shaozeming/xunsearch-laravel

发布文件vendor

执行

php artisan vendor:publish

找到和xun search有关的发布文件,我这里是9,输入9发布配置文件。

然后在config目录多了一个xunsearch.php文件,此为配置文件

如何配置,请参考xun search和此composer包的文档:

https://packagist.org/packages/shaozeming/xunsearch-laravel

http://www.xunsearch.com/doc/php/guide/ini.guide

2、执行所有索引

前面Xun Search服务端安装成功了,并且端口是可以正常访问的,那么到了此步就简单了。

$disks = NetDisk::Validate(1)->get()->toArray();
$d = Xunsearch::setDatabase('referrers')->addIndex($disks);

如上,我这里是从Laravel模型中获取所有数据,并且toArray转换为数组(也必须转换为数组),然后将该数组传进addIndex()方法里面就行。

可能直接到了这步,大家有点蒙。我详细说一下,数组里面是的字段和在config/xunsearch.php 配置的字段是一致的。

如上,你的数组里面必须有这配置文件里面写的字段名。

然后上面代码中的setDatabase('referrers')可以不写,就是默认的;写了的话,那么在配置文件里面就必须有对应的配置。如上图的referrers

那么,如何看索引成功没有?

如果你是默认安装位置的话,那进入:/usr/local/xunsearch/data

cd /usr/local/xunsearch/data

查看里面文件夹的大小:du -h

如果这里有几百K以及上M,那么是索引成功了的。

如何搜索呢,就去这看:https://learnku.com/articles/16958/laravel-5-software-package-based-on-xunsearch-sdk-supports-full-spelling-spelling-abbreviation-fuzzy-search-hot-search-search-tips

或这也行:https://packagist.org/packages/shaozeming/xunsearch-laravel

新数据自动索引

其实很简单,看文档里面就有:

//$data = ['id'=>1,'email'=>'123456@ming.com'];
//Xunsearch::updateIndexOne($data); 更新索引
//Xunsearch::setDatabase('student')->updateIndexOne($data); 更新自定义索引数据库索引

updateIndexOne方法就行。

你只需要在新建数据后,将该模型toArray,然后传入即可。

$data = $model->toArray(); // 将模型toArray
Xunsearch::updateIndexOne($data); // 更新索引
// 如果你这里是设置了自定义数据库的,那么就要setDatabase('student')
// 也即:Xunsearch::setDatabase('student')->updateIndexOne($data); // 更新索引

就行啦。

但如果你怕影响web端访问速度,那么如何办?

加入队列即可,如何使用队列,请参考我的文章:https://cloud.tencent.com/developer/article/1538361

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 安装XunSearch
  • PHP端安装
  • 新数据自动索引
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档