数据库

xunsearch在thinkphp5中的使用

2019-05-30  本文已影响0人  哎哟我去

安装xunsearch的服务器端,不会的话点这里

通过composer安装sdk

composer require --prefer-dist hightman/xunsearch "*@beta"

建立xunsearch的索引

这里我们以eacms项目为例:

  1. 利用官方php-sdk工具来实现:
    在\xunsearch\sdk\php\app下新建一个名为“eacms”的配置文件;
    /**
     * @param $data     需要导入的数据
     * @param string $file 配置文件名称
     * @return bool|string
     * 添加、更新数据
     */
    public function xunAdd($data, $file = 'eacms')
    {
        try {
            $xs = new \XS($file);

            $doc = new \XSDocument();
            $doc->setFields($data);
            $index = $xs->index;
            $index->update($doc);

            $result = $index->flushIndex();
            return $result;
        } catch (\Exception $exception) {
            return $exception->getMessage();
        }
 }

这个我没有测试过,理论是OK的。。。。
推荐第一种方法,方便定时任务。

/**
     * @param int $limit_num 显示的结果条数
     * @param int $limit_begin 跳过前N位的结果
     * @param bool $fuzzy 是否模糊查询
     * @param bool $synon 否开启同义词查询
     * @throws \XSException
     */
    public function xunSearch($limit_num = 20, $limit_begin = 0, $fuzzy = true, $synon = true)
    {
        $keyword = \input('keyword');
        if (empty($keyword)) {
            $this->error('请输入关键字');
        }
        $keyword = \trim($keyword);


        $xs = new \XS('eacms');
        $search = $xs->getSearch();
        $s_time = \microtime(true);
        //结果集
        $docs = $search
            //设置是否开启模糊查询
            ->setFuzzy($fuzzy)
            //设置是否开启同义词查询
            ->setAutoSynonyms($synon)
            //设置查询结果显示条数
            ->setLimit($limit_num, $limit_begin)
            //查询关键字
            ->setQuery($keyword)
            ->search();
        //高亮处理,因为$docs的结果集不让修改,所以自己建一个数组并组装需要的字段
        $res = [];
        foreach ($docs as $k => $doc) {
            $res[$k]['id'] = $doc['id'];
            $res[$k]['title'] = $search->highlight($doc['title']);
            $res[$k]['content'] = $search->highlight($doc['content']);
        }
        $e_time = \microtime(true);
        //获得本次查询的结果总数(这是个估值)
        $matched = $search->getLastCount();
        //获得搜索数据库中数据的总量
        $total = $search->getDbTotal();
        //搜索耗时
        $cost_time = $e_time - $s_time;
        $result = [
            'count' => \count($res),
            'cost_time' => \round($cost_time, 4),
            'result' => $res,
        ];
        \halt($result);
    }

测试结果:

我键入关键字:谷歌OR我们
搜索规则可以参看官方文档
结果如下:

搜索结果

有一点小弟不是很明白

搜索“我们”出来结果,但是搜索“我”却没有结果,这是为嘛呢!?
恳请(女装)大佬不吝赐教~_~

上一篇 下一篇

猜你喜欢

热点阅读