关于Yii2.0框架安装yii-xunsearch扩展
in Tutorials with 0 comment

关于Yii2.0框架安装yii-xunsearch扩展

in Tutorials with 0 comment

请输入图片描述

安装xunsearch服务

Xunsearch PHP-SDK 是与 xunsearch 后端服务协同工作的,所以后先必须先在您的服务器 上安装服务端,服务器操作系统要求必须是 Linux、BSD 或其它类 UNIX 系统,同时安装了 gcc、make 等基础编译环境。

检测linux系统是否安装gcc,若没有安装gcc,请先安装gcc。

gcc -v

1.下载安装包
运行下面指令下载、解压安装包。

wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
tar -xjf xunsearch-full-latest.tar.bz2

2.执行安装脚本,根据提示进行操作,主要是输入 xunsearch 软件包的安装目录,强烈建议单独 规划一个目录,而不是混到别的软件目录中。

cd xunsearch-full-1.3.0/
sh setup.sh

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

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

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

安装PHP-SDK

采用 PHP 语言编写的 xunsearch 开发包,在此基础上开发您自己的全文检索。
在此简要介绍以下几个文件:

- lib/XS.php             入口文件,所有搜索功能必须包含此文件
- lib/XS.class.php       未合并带注释的入口文件,会自动加载其它 .class.php 文件
- util/RequireCheck.php  命令行运行,用于检测您的 PHP 环境是否符合运行条件
- util/IniWizzaard.php   命令行运行,用于帮助您编写 xunsearch 项目配置文件
- util/Quest.php         命令行运行,搜索测试工具
- util/Indexer.php       命令行运行,索引管理工具
- util/SearchSkel.php    命令行运行,根据配置文件生成搜索骨架代码
- util/xs                命令行工具统一入口

在开始编写您的代码前强烈建议执行 util/RequireCheck.php 以检查环境。

安装yii2.0-xunsearch扩展( 可以参考Here

这里使用composer安装,可以运行下面的代码:

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

或者将以下内容添加到您的项目根目录 composer.json 中的 require 章节, 然后运行 composer install

"hightman/xunsearch": "*@beta"

Yii-2.x用法

在 yii2 中,xunsearch支持 ActiveRecord 方式来操作。首先, 请在应用配置文件的 components 中添加以下代码,通常是 config/main.php

// application components
'components => [
    // ... other components ...
        'xunsearch' => [
        'class' => 'hightman\xunsearch\Connection',    // 此行必须
        'iniDirectory' => '@app/config',    // 搜索 ini 文件目录,默认:@vendor/hightman/xunsearch/app
        'charset' => 'utf-8',    // 指定项目使用的默认编码,默认即时 utf-8,可不指定
    ],
],

首先必须创建一个继承自 hightmanxunsearchActiveRecord 的模型类,默认情况下会以全小写的类名字作为 ini 文件名。如需指定,请自行覆盖编写 hightmanxunsearchActiveRecord::projectName()。通常代码如下:

class Demo extends \hightman\xunsearch\ActiveRecord
{
    /*public static function projectName() {
        return 'another_name';    // 这将使用 @app/config/another_name.ini 作为项目名
    }*/
}

由此可见,如果命名规范模型类几乎不需要任何额外代码,上述代码会自动采用 demo.ini 并自动装载字段配置。

为避免数据重复,底层统一通过 XSIndex::update() 方法进行提交的。

// 添加索引,也可以通过 $model->setAttributes([...]) 批量赋值
$model = new Demo;
$model->pid = 321;
$model->subject = 'hello world';
$model->message = 'just for testing...';
$model->save();

// 更新索引
$model = Demo::findOne(321);
$model->message .= ' + updated';
$model->save();


// 添加或更新索引还支持以方法添加索引词或文本
// 这样做的目的是使得可以通过这些关键词检索到数据,但并非数据的字段值
// 用法与 XSDocument::addTerm() 和 XSDocument::addIndex() 等同
// 通常在 ActiveRecord::beforeSave() 中做这些操作
$model->addTerm('subject', 'hi');
$model->addIndex('subject', '你好,世界');

// 如需删除数据则可直接
$model->delete();

如需要做批量删除或更新,请参见以下代码文档:ActiveRecord::updateAll() 和 ActiveRecord::deleteAll()。

重点先介绍一下 ActiveQuery::where() 系列搜索条件函数的用法,和 yii2 其它的 ActiveRecord 类似:

$query = Demo::find(); // 返回 ActiveQuery 对象
$condition = 'hello world';    // 字符串原样保持,可包含 subject:xxx 这种形式
$condition = ['WILD', 'key1', 'key2' ... ];    // 通过空格将多个查询条件连接
$condition = ['AND', 'key1', 'key2' ... ]; // 通过 AND 连接,转换为:key1 AND key2
$condition = ['OR', 'key1', 'key2' ... ]; // 通过 OR 连接
$condition = ['XOR', 'key1', 'key2' ... ]; // 通过  XOR 连接
$condition = ['NOT', 'key']; // 排除匹配 key 的结果
$condition = ['pid' => '123', 'subject' => 'hello']; // 转换为:pid:123 subject:hello
$condition = ['pid' => ['123', '456']]; // 相当于 IN,转换为:pid:123 OR pid:456
$condition = ['IN', 'pid', ['123', '456']]; // 转换结果同上
$condition = ['NOT IN', 'pid', ['123', '456']]; // 转换为:NOT (pid:123 OR pid:456)
$condition = ['BETWEEN', 'chrono', 14918161631, 15918161631]; // 相当于 XSSearch::addRange(...)
$condition = ['WEIGHT', 'subject', 'hello', 0.5]; // 相当于额外调用 XSSearch::addWeight('subject', 'hello', 0.5);
$query->where($condition);

对于 hightmanxunsearchActiveQuery 对象,主要支持以下几个方法获取和操作:

asArray(): 以数组形式返回数据
one(): 返回一行数据 
all(): 返回全部数据 
count(): 统计数据匹配数据,是估算的并不是完全准确 
exists(): 判断查询条件是否存在数据 
where(): 指定搜索条件 
orderBy(): 指定排序方式,默认为相关性排序 
limit(), offfset(): 指定获取数据量和偏移,用于分页检索 
with(), indexBy ... 
buildOther(function(\XSSearch $search){}) 可通过此方法定制检索选项
Responses