1.xunsearch安装
mkdir /xunsearch
cd /xunsearch
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
然后解压、安装
tar -xjf xunsearch-full-latest.tar.bz2
cd xunsearch-full-1.3.0/
sh setup.sh
第一次安装的话,过程可能会稍显漫长,请不必着急,您大可泡杯茶一边喝一边等待即可。
待命令运行结束后,如果没有出错中断,则表示顺利安装完成,然后就可以启动/重新启动 xunsearch 的后台服务,下面命令中的 $prefix 请务必替换为您的安装目录,而不是照抄。
cd $prefix ; bin/xs-ctl.sh restart
强烈建议您将此命令添加到开机启动脚本中,以便每次服务器重启后能自动启动搜索服务程序, 在 Linux 系统中您可以将脚本指令写进 /etc/rc.local 即可。
2.xunsearch启动
启动的方式有四种:
bin/xs-ctl.sh -b local start // 监听在本地回环地址 127.0.0.1 上
bin/xs-ctl.sh -b inet start // 监听在所有本地 IP 地址上
bin/xs-ctl.sh -b a.b.c.d start // 监听在指定 IP 上
bin/xs-ctl.sh -b unix start // 分别监听在 tmp/indexd.sock 和 tmp/searchd.sock
我选择第二种启动方式,监听在所有的本地的ip地址上
3.tp5安装xunsearch
首先 composer 安装
composer require hightman/xunsearch
安装完成后,在 tp5 的 extend 目录下新建 xunsearch/XSSearch.php,内容如下:
<?php
namespace xunsearch;
/**
* Class XSSearch 全文檢索
*/
class XSSearch {
/**
* 中文分词搜索
* @param string $keywords 关键词
* @param string $file ini文件名
* @param bool $is_scws 是否开启中文分词(例如:口袋新世代,拆分成:口袋、新、世代)
* @param int $limit 搜索结果条数
* @return array 返回结果
* @throws \XSException
*/
public static function xunsearch($keywords,$file = 'demo',$is_scws = false,$limit = 100){
$xs = new \XS($file);
if($is_scws === true) {
//中文分词
$tokenizer = new \XSTokenizerScws;
//词语拆分
$words = $tokenizer->getTokens($keywords);
$where = '';
//拼接成查询条件(OR)
foreach ($words as $key => $val) {
if ($key == 0) {
$where = $val;
} else {
$where .= ' OR ' . $val;
}
}
}else {
$where = $keywords;
}
$result = $xs->search->setQuery($where)
// ->setSort('id','asc') #按索引排序
->setDocOrder(true) #按添加索引排序(升序)
->setLimit($limit)
->search();
$xs->search->close();
return $result;
}
/**
* 新增(更新)xunsearch数据库
* @param array $data
* @param string $file ini文件名
* @return bool
*/
public function xunsearchSave($data,$file = 'demo'){
try {
$xs = new \XS($file);
#创建文档对象
$doc = new \XSDocument;
$doc->setFields($data);
#更新(新增)数据
$index = $xs->index;
$index->update($doc);
#强制刷新当前索引列表数据
$result = $index->flushIndex();
return $result;
}catch (\Exception $e){
return false;
}
}
}
保存,git提交到内网仓库,我这是自己搭建的一个linux内网仓库( xunsearch 只能在 linux 上用),想要在windows上使用xunsearch服务必须在windows上单独下载它的sdk:http://www.xungle.com/site/download
4.创建索引与导入数据源
在我们安装号的 tp5 根目录下的 vender
目录下找到安装好的 vendor/hightman/xunsearch
的目录结构
_
|- doc/ 离线 HTML 版相关文档
|- app/ 用于存放搜索项目的 ini 文件
|- lib/XS.php 入口文件,所有搜索功能必须且只需包含此文件
\- util/ 辅助工具程序目录
|- RequireCheck.php 用于检测您的 PHP 环境是否符合运行条件
|- IniWizzaard.php 用于帮助您编写 xunsearch 项目配置文件
|- Quest.php 搜索测试工具
\- Indexer.php 索引管理工具
在 app 目录新建一个 car.ini 文件,内容如下:
project.name = details
project.default_charset = utf-8
server.index = 8383
server.search = 8384
[id]
type = id
[name]
type = title
由于我项目与 xunsearch 在同一个服务器上,所以不需要另外指定 ip 与端口
导入索引数据源到 xunsearch
官网文档:http://www.xunsearch.com/doc/php/guide/util.indexer
注意:我这里是在项目根目录下的 vender/hightman/xunsearch
进行命令创建索引的,
[root@localhost xunsearch]# util/Indexer.php --rebuild --source=mysql://root:123456@localhost/cheyibai/cyb_car_details --sql="SELECT id,name,brand_id FROM cyb_car_details" --project=details
-bash: util/Indexer.php: 权限不够
这时可能会有一个问题就是权限不够
,这是因为文件util/Indexer.php
没有执行权限,需要更改一下权限
[root@localhost xunsearch]# chmod -R 700 util
我这里更该了整个util
目录的执行权限(推荐),然后在执行导入数据源就没问题了,
[root@localhost xunsearch]# util/Indexer.php --rebuild --source=mysql://root:123456@localhost/cheyibai/cyb_car_details --sql="SELECT id,name,brand_id FROM cyb_car_details" --project=details
开始重建索引 ...
初始化数据源 ... mysql://root:123456@localhost/cheyibai/cyb_car_details
开始批量导入数据 (请直接输入数据) ...
完成索引导入:成功 28 条,失败 0 条
完成重建索引 ...
[root@localhost xunsearch]#
然后在命令行进行测试
[root@localhost xunsearch]# util/Quest.php details 2019
在 4 条数据中,大约有 3 条包含 2019 ,第 1-3 条,用时:0.0006 秒。
1. 2019款 sDrive18Li 时尚型 #1# [100%,0.32]
2. 2019款 sDrive18Li 领先型 #3# [100%,0.32]
3. 2019款 sDrive18Li 尊享型 #5# [100%,0.32]
2019是我 details 表的车名称为2019
查看索引
[root@localhost xunsearch]# util/Indexer.php --info -p details
---------- SERVER INFO BEGIN ----------
{
id:"indexd", uptime:433845, num_burst:1, max_burst:1,
num_accept:9, aps:0.0, num_task:35, tps:0.0,
sock:7, name:"details", home:"data/details", rcv_size:8,
flag:0x0000, version:"1.4.13"
}
DBS: [db] -> [NULL]
CMDS:
-> {NULL}
---------- SERVER INFO END ----------
数据库名:db[0x001a]
队列数据:28条
导入进程:无
[root@localhost xunsearch]#
网友评论