美文网首页数据库
tp5使用xunsearch

tp5使用xunsearch

作者: IT小池 | 来源:发表于2019-05-27 11:32 被阅读0次

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]# 

相关文章

  • tp5使用xunsearch

    1.xunsearch安装 然后解压、安装 第一次安装的话,过程可能会稍显漫长,请不必着急,您大可泡杯茶一边喝一边...

  • 如何使用xunsearch

    1 安装 1.1 安装依赖环境 apt-get install php build-essential zlib1...

  • 如何使用xunsearch

    1 安装 1.1 安装依赖环境 apt-get install php build-essential zlib1...

  • 如何使用xunsearch

    1 安装 1.1 安装依赖环境 apt-get install php build-essential zlib1...

  • tp5整合xunsearch全文检索

    应用场景:大量数据的模糊搜索,数据统计分析等场景,xunsearch的索引中只维护id和检索字段,例如id和con...

  • ThinkPHP5小程序笔记(二)

    TP5数据库 惰性连接,节省资源;TP5中使用查询构造器不使用原生sql的好处是,TP5编写了一套规范,语法简单的...

  • xunsearch 安装

    记录xunsearch 安装 使用 这个错误需要定位到安装目录,这里是/var/webwww/xunsearchc...

  • xunsearch增量索引改进版

    最近测试了xunserach全文索引程序。xunsearch只有LINUX版,所以想用windows服务器请使用其...

  • 关于xunsearch的安装 使用

    下载、安装 运行 项目配置

  • 封装xunsearch类

    封闭xunsearch方便其进行操作

网友评论

    本文标题:tp5使用xunsearch

    本文链接:https://www.haomeiwen.com/subject/vpictctx.html