新手简单集成xunsearch到自己的PHP项目中去笔录

2023-12-18 12:32

本文主要是介绍新手简单集成xunsearch到自己的PHP项目中去笔录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

想要简单集成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);

-----------------------------分割线---------------------------------------
好了,我是新手,被折腾了好久才解决,如有人碰到同样问题就应该有所帮助

这篇关于新手简单集成xunsearch到自己的PHP项目中去笔录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508370

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。