想要简洁集成xunsearch到本身的PHP项目中去,不难,但是官网的文档没有一个新手入门的demo,官网的demo横竖我看不懂,于是我就写了踩坑完就想写这篇文章,记载下来
步调开始:
1.起首要相识搜刮的简洁以道理:①安置xunsearch运行,我是在linux体系用下令行安置的,运行下面指令下载、解压安置包
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
官网还叫参加开机启动,我的是云办事器,就懒得添加先,险些不绝机的。
②安置好之后根据官网的可以利用默认安置的sdk举行项目摆设,也可以本身拷贝到本身的项目中去,仁者见仁智者见智了。
③重点在这里了,前面统统都预备好了,接着便是在本身的PHP代码中引入XS.php文件就能利用搜刮引擎了,但是题目来了,我用的是tp5框架做的体系,官网提供的代码是:
require_once '/vendor/xunsearch/sdk/php/lib/XS.php';
我去世活引入不可功,提示文件XS.php不存在;也便是没引入乐成,我文件路径没错的,也存在文件,头大了,赶忙百度起来,最终发觉了题目地点,
require_once './../vendor/xunsearch/sdk/php/lib/XS.php';tp框架因此index.php地点名目为根名目的,tp5是在public下的,是以要用"./../"名目指向
以上引入没题目了。
2.项目代码集成开始,起首创建一个XS工具
(1)下面遇到个坑,对我来说是个坑,由于我一开始照着官网$this->xs = new XS('dev_blog');new一个工具去世活不可功,提示class xxx not found ;头发缓缓变少~~
又是一番百度,办理要领如下:
$this->xs = new XS('dev_blog');
这个不知道是不是只有tp框架会如许,其他框架我不懂有没有这个题目了。
(2)有了搜刮工具,官网的就直接实行搜刮操纵了,实在官网的文档是不根据流程走的,以是我就认为能用了,
$search = $this->xs->search;
$query = $keyword;
$search->setQuery($query)->setLimit(15);
$docs = $search->search();
输出都是array(0);
厥后想想有那边不合错误劲啊,数据都没有搜刮个毛,是本身蠢了,官网的文档也是,百度出来一堆人说文档太简洁了(的确啥都没说);于是就去搜刮添加数据的资料,文档的确有这个操纵,但是没有说搜刮前要先导入数据这个步调,或许是我本身蠢。
foreach ($list as $key => $value) {
$doc->setFields($list[$key]);
$this->xs->index->update($doc);
}
$this->xs->index->endRebuild();
$this->xs->index->flushIndex();
将上面代码写在(2)中的前面就可以了,好了最终可以搜刮出来工具了
中心还遇到了数据重复题目,如我代码解释那边说的,利用add()没有唯一性限定的,重复数据也会添加到搜刮数据内里的,我就用update就不会显现重复了,官网划重点:
Note: 假如索引数据库中已存在主键值雷同的文档,并不会有辩论提示,文档仍会 添加乐成而且不会有任何辩论提示。以是除非您明白知道此为新文档,不然发起利用 更新文档。
别的,假如您自行扩展了 XSDocument,请利用您自定界说的文档类创建工具
更新、修改文档
在 Xunsearch PHP-SDK 中,更新、修改文档和添加文档的做法非常的雷同, 只不外挪用的是 XSIndex::update,而且在内部处置惩罚上有所区别。
假如索引数据库中已存在主键值雷同的文档,那么相称于先删除原有的文档,再用当前文档更换它。 假如未存在主键值雷同的文档,则成效和添加文档完全同等。
Info: 有人大概会想,既然云云为什么还要有 XSIndex::add 呢,由于添加文档少了一个推断 历程,具有更高一些的服从。是以,假如您在利用 API 时能明白知道当前文档是新增的,那么 照旧发起利用 add 这个 API。
树模代码如下:
$data = array(
'pid' => 234,
'subject' => '测试文档的标题',
'message' => '测试文档的内容部门',
'chrono' => time()
);
$doc = new XSDocument;
$doc->setFields($data);
$this->xs->index->update($doc);
-----------------------------支解线---------------------------------------
好了,我是新手,被折腾了很久才办理,若有人遇到同样题目就应该有所关心