Laravel xunsearch 搜索功能安装与测试

在laravel开发过程中需要用到搜索功能开发,一般都是安装elasticsearch扩展来,解决这个功能,由于elasticsearch安装对服务器有一定的要求,内存必须大于2G才可以安装并应用。接下来我来讲一下xunsearch的安装与应用。

1.下载 压缩包

https://github.com/hightman/xunsearch/

1.在linux中 运行下面指令下载、解压安装包

tar -xvf xunsearch-full-latest.tar.bz2

2.安装 执行安装脚本

根据提示进行操作,主要是输入 xunsearch 软件包的安装目录

cd xunsearch-full-1.4.11
./sh setup.sh

第一次安装的话,过程可能会稍显漫长,请不必着急,您大可泡杯茶一边喝一边等待即可。

3.安装成功

4.待命令运行结束后,如果没有出错中断,则表示顺利安装完成,然后就可以启动/重新启动 xunsearch 的后台服务,下面命令中的 $prefix 请务必替换为您的安装目录,而不是照抄。

$prefix为安装目录/usr/local/xunsearch

cd $prefix ; bin/xs-ctl.sh restart

5. 安装 PHP-SDK

cd 进入相应需要安装依赖程序的网站根目录中,安装成功后会在vendor文件家中看到安装文件目录hightman

$ composer require hightman/xunsearch

5.1体验 DEMO 项目

为了让您对 xunsearch 有一个初步的印象和了解,我们在这个章节,借助辅助工具 带您体验一下搜索和索引的操作。这里可能有很多内容您尚不熟悉,请不必感到惶恐, 只要跟着说明完成操作即可,后面还有大量章节对各项进行深入讲解。
  • 5.1.1查看项目配置文件

每一个 xunsearch 搜索项目都有一个独立的 INI 配置文件。DEMO 项目的配置文件 位于 $prefix/sdk/php/app/demo.ini 使用以下指令便可直接查看配置文件内容。

cat $prefix/sdk/php/app/demo.ini

没错,配置文件很简单、清晰,它默认连接本地的 8383、8384 端口并使用 UTF-8 编码,包含四个字段:pid,subject,message,chrono 。

  • 5.1.2填充索引数据

出于测试方便,我们采用 csv 格式来写入索引数据,请先按以下方式操:

cd $prefix/sdk/php
util/Indexer.php --source=csv --clean demo

然后脚本会给出如下提示:

初始化数据源 ... csv
WARNING: input file not specified, read data from <STDIN>
开始批量导入数据 ...

然后我们测试输入下面三条数据,最后一条数据打完后必须敲入回车,然后按 Ctrl-D 结束操作。

Note: 在 Windows 的命令行下运行请使用 Ctrl-Z 来表示结束。
1,关于 xunsearch 的 DEMO 项目测试,项目测试是一个很有意思的行为!,1314336158
2,测试第二篇,这里是第二篇文章的内容,1314336160
3,项目测试第三篇,俗话说,无三不成礼,所以就有了第三篇,1314336168

这里屏幕会提示如下信息,表示完成数据提交:

INFO: reach end of file or error occured, total lines: 3
完成索引导入:成功 3 条,失败 0 条
刷新索引提交 ...

索引数据的提交是异步行为,所以录完数据并不是立刻就能检索到(当然,这个时间差也不会太大)。 所以为稳定起见请稍等几秒再进行下一步的搜索测试。

  • 5.1.3测试搜索

首先,我们体验一下正常的搜索,分别以关键词 项目、测试、项目测试、俗话说、莫须有 进行检索:

cd $prefix/sdk/php
util/Quest.php demo 项目
util/Quest.php demo 测试
util/Quest.php demo 项目测试
util/Quest.php demo 俗话说
util/Quest.php demo 莫须有

每个搜索后的关键词系统都会记录下来进行分析,并保存在日志中用于统计热门搜索、搜索建议、相关搜索等。 默认情况系统会每 2 小时进行一次更新日志,由于我们在进行测试,所以请使用以下指令进行强制刷新。

util/Indexer.php --flush-log demo

接下来我们测试一下稍微复杂一点的字段、布尔搜索功能:

util/Quest.php demo subject:测试
util/Quest.php demo pid:2
util/Quest.php demo "第三篇 OR pid:1"

最后我们再测试一下日志相关的搜索情况,其中 --suggest 是搜索建议,当用户敲入少许汉字或字母时给出 相应的关键词建议(常用于搜索输入框下拉自动提示),而 --related 表示相关搜索、--hot 表示热门搜索、 --correct 表示搜索纠错。

util/Quest.php --hot demo
util/Quest.php --related demo 项目
util/Quest.php --correct demo yunsearch
util/Quest.php --correct demo xmcs
util/Quest.php --correct demo xianmu
util/Quest.php --suggest demo x
util/Quest.php --suggest demo xm
util/Quest.php --suggest demo xia
util/Quest.php --suggest demo xiangmuc
util/Quest.php --suggest demo 项
  • 5.1.4. 总结

现在应该对 xunsearch 所提供的功能有了初步的印象。您可能会发现在这个体验过程中并 没有涉及到一行代码,因为我们目的只是先了解和接触一下 xunsearch 搜索,所以采用 了附加提供的脚本工具来完成所有操作,关于脚本工具的详细使用请阅读后面的专题章节。

6. 接下来就是laravel开发并应用这个插件了。

下载应用插件包 https://github.com/cpphp/laravel-xunsearch/

将Common.php,Search.php放入controller文件加下Api文件夹中
将IndexController.php,改成SearchController.php并使用
7.在应用前首先要写好配置文件并将配置文件放入/vendor/hightman/xunsearch/app/**.ini

源码如下:文件名必须与工程名一致

project.name = ***
project.default_charset = utf-8
server.index = 127.0.0.1:8383
server.search = 127.0.0.1:8384
[id]
type = id
[cid]
type = numeric
[title]
type = self
[keywords]
index = mixed
[info]
index = both
[img]
cutlen = 300
phrase = yes

8.配置文件配置好后 需要导入数据

cd vendor/hightman/xunsearch
导入数据:

util/Indexer.php --rebuild --source=mysql://数据库用户名:数据库密码@localhost/数据库名 --sql="SELECT id,title,description,column_id,image,review_count,created_at FROM products" --project=项目名称

9.搜索页面中

因为xunserach 检索出来的数据是原生数组信息,所以在渲染页面直接按照数组遍历就OK
源码如下:

@foreach($searchRes as $key=>$result)
<li>{{$result['title']}}</li>
@endforeach

这样就一切OK

阅读 286

Comments