本搜索自豪的采用 迅搜,对 Yii 支持非常友好,详情参照官方提供的 Xunsearch SDK for PHP。目前只支持帖子标题和内容搜索。
如何安装 Xunsearch
我只说一个大概,详情请参照官方文档。
首先要安装 Xunsearch,安装命令如下:
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 tar -jxvf xunsearch-full-latest.tar.bz2 cd xunsearch-full-1.4.9 # 注意此处的文件夹名,可能有不一样 sh ./setup.sh
安装完记得要启动 xunsearch 服务程序,示例如下(安装完之后会提示你如何启动):
/home/vagrant/xunsearch/bin/xs-ctl.sh start
Yii2 如何使用 Xunsearch
首先要在配置文件frontend/config/main.php添加 xunsearch 组件:
'components' => [ ... 'xunsearch' => [ 'class' => 'hightman\xunsearch\Connection', // 此行必须 'iniDirectory' => '@frontend/config', // 搜索 ini 文件目录,默认:@vendor/hightman/xunsearch/app 'charset' => 'utf-8', // 指定项目使用的默认编码,默认即时 utf-8,可不指定 ], ... ],
在frontend/config目录下添加 xunsearch 配置文件search.ini, 下面是 GetYii 的配置:
project.name = getyii project.default_charset = utf-8 server.index = 8383 server.search = 8384 [topic_id] type = id [title] type = title [content] type = body [status] index = self tokenizer = full [updated_at] type = numeric
新建一个 Model 文件,GetYii 的 Model 是common/models/Search.php里面的代码就跟写 Yii2 一样的:
<?php namespace common\models; use yii\data\ActiveDataProvider; class Search extends \hightman\xunsearch\ActiveRecord { public function search($keyword) { $query = self::find()->where($keyword)->andWhere(['status' => [1, 2]]); $dataProvider = new ActiveDataProvider([ 'query' => $query, 'sort' => [ 'defaultOrder' => [ 'updated_at' => SORT_DESC, ] ] ]); return $dataProvider; } }
添加新贴子的时候实现自动入库
在 Model 里面用 afterSave 来实现自动更新和插入
public function afterSave($insert) { if ($insert) { $search = new Search(); $search->topic_id = $this->id; $search->status = self::STATUS_ACTIVE; } else { $search = Search::findOne($this->id); $search->status = $this->status; } $search->title = $this->title; $search->content = $this->content; $search->updated_at = $this->updated_at; $search->save(); }
剩下的就是搜索的实现了,更详情代码请参照 GetYii 源码 - 添加xunsearch 搜索基本功能
如何导入以前的数据到 Xunsearch
下面是 GetYii 导入数据的具体实现(记得数据库用户名和密码改要改成自己的):
vendor/hightman/xunsearch/util/Indexer.php --source=mysql://root:root@localhost/getyii --sql="SELECT id AS topic_id,title,content,status,updated_at FROM post" --project=frontend/config/search.ini
查看 Xunsearch 搜索当前导入的词库
在 GetYii 根目录运行:
vendor/hightman/xunsearch/util/Quest.php -p frontend/config/search.ini 'xx'
- 本文固定链接: https://zxbcw.cn/post/4494/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)