linux xunsou_Yii2.0-Linux环境搭建站内搜索-xunsearch

简单说明:

本教程是在linux环境中实现xunsearch站内搜索,本站的站内搜索即是用xunsearch搭建的,效果可在本站(Yii 中文网 http://www.yii-china.com)验证。

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

安装、升级 xunsearch运行下面指令下载、解压安装包wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2

tar -xjf xunsearch-full-latest.tar.bz2

执行安装脚本,根据提示进行操作,主要是输入 xunsearch 软件包的安装目录,强烈建议单独 规划一个目录,而不是混到别的软件目录中。cd xunsearch-full-1.3.0/        //此处的文件名版本根据实际情况而定

sh setup.sh

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

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

强烈建议您将此命令添加到开机启动脚本中,以便每次服务器重启后能自动启动搜索服务程序, 在 Linux 系统中您可以将脚本指令写进 /etc/rc.local 即可。

有必要指出的是,关于搜索项目的数据目录规划。搜索系统将所有数据保存在 $prefix/data 目录中。 如果您希望数据目录另行安排或转移至其它分区,请将 $prefix/data 作为软链接指向真实目录。

注:以上只要开启xunsearch的后台服务即可进入下一步操作

Yii2.0项目中安装扩展:

这是采用 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 以检查环境。

具体各项文档内容请参阅子目录: doc/ 推荐在线阅读官网的文档:http://www.xunsearch.com/doc/

Composer 支持

自 v1.4.9 起,通过 subtree 功能将 xs-sdk-php 分离成为一个只读的子仓库, 以支持通过 composer 安装。我们的包名称为 hightman/xunsearch,内含全部 PHP-SDK 的库文件,还包括支持 Yii 的扩展类。

安装

和绝大多数 composer 一样,你可以通过以下两种方法中的任意一种安装。

可以直接运行composer require --prefer-dist hightman/xunsearch "*@beta"

或者将以下内容添加到您的项目根目录 composer.json 中的 require 章节, 然后运行 composer install"hightman/xunsearch": "*@beta"

在 yii2 中,首先, 请在应用配置文件的 components 中添加以下代码:// application components

'components => [

// ... other components ...

'xunsearch' => [

'class' => 'hightman\xunsearch\Connection', // 此行必须

'iniDirectory' => '@app/config',    // 搜索 ini 文件目录,默认:@vendor/hightman/xunsearch/app

'charset' => 'utf-8',   // 指定项目使用的默认编码,默认即时 utf-8,可不指定

],

],

通过 ActiveRecord 方法来检索和创建索引,由于遵循 yii2 的思想进行开发设计, 使用起来非常方便和简单。

创建 AR 对象

首先必须创建一个继承自 hightman\xunsearch\ActiveRecord 的模型类,默认情况下会以全小写的类名字作为 ini 文件名。如需指定,请自行覆盖编写 hightman\xunsearch\ActiveRecord::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);

对于 hightman\xunsearch\ActiveQuery 对象,主要支持以下几个方法获取和操作:asArray(): 以数组形式返回数据

one(): 返回一行数据

all(): 返回全部数据

count(): 统计数据匹配数据,是估算的并不是完全准确

exists(): 判断查询条件是否存在数据

where(): 指定搜索条件

orderBy(): 指定排序方式,默认为相关性排序

limit(), offfset(): 指定获取数据量和偏移,用于分页检索

with(), indexBy ...

buildOther(function(\XSSearch $search){}) 可通过此方法定制检索选项

此外,ActiveQuery 还提供了一个名为 beforeSearch 的事件,可在执行搜索前再次对 ActiveQuery::getSearch()所返回的 XSSearch 对象进行调整。

如果以 AR 对象获得数据,可通过以下几个方法获取搜索结果元数据,参照 XSDocument 相关用法。$model = Demo::findOne(321);

$model->docid(); //Xapian数据

ID$model->rank(); //序号

$model->percent(); //匹配百分比

$model->ccount(); //折叠数量,须在 XSSearch::setCollapse() 指定后才有效

$model->matched(); //获得匹配词汇

ActiveRecord 对象实现了绝大多数据接口,完全可以像使用普通数据库模型一样使用它。如果需要 访问原始的 xunsearch 对象,请通过以下方式获取 Database 对象:$db = Demo::getDb();

$search = $db->getSearch();

$index = $db->getIndex();

// 如有必要,还可以获得 scws 分词对象

$scws = $db->getScws();

来源:http://www.xunsearch.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值