Xunsearch 是一个高性能、全功能的全文检索解决方案。
Xunsearch 旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。
Xunsearch 中文译名为“迅搜”,代码中的经常被缩写为 XS,既是英文名称的缩略也是中文声母缩写。 这儿的“迅”是快速的意思,至少包含了两层涵义:其一代表了搜索结果的响应能力,其二则为二次开发难度、速度。
Xunsearch 采用结构化分层设计,包含后端服务、前端开发包两大部分,层次清晰而不交叉。 其中后端是采用 C/C++ 编写的守护进程,而前端采用最为流行的脚本语言 PHP ,对于 web 搜索项目更为方便。 具体参见架构设计。
Xunsearch 极大程度降低的搜索开发的难度,除了常规的中文分词、字段检索、布尔语法等功能外, 还比其它免费的解决方案提供了用户急需的相关搜索、拼音搜索、结果高亮、搜索建议等等。 具体的清单请参见我们的功能列表。
应用领域:Xunsearch 可以帮助您建立各种行业门户/垂直搜索、BBS 论坛搜索、CMS/Web站内搜索、文档/文献资料检索, 以及各种基于现有数据库系统的全文检索。
安装
Xunsearch PHP-SDK 是与 xunsearch 后端服务协同工作的,所以后先必须先在您的服务器 上安装服务端,服务器操作系统要求必须是 Linux、BSD 或其它类 UNIX 系统,同时安装了 gcc、make 等基础编译环境。
1. 安装、升级 Xunsearch
1)、运行下面指令下载、解压安装包
[root@cklocalhost ~]# wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 [root@cklocalhost ~]# tar -xjf xunsearch-full-latest.tar.bz2
2)、执行安装脚本,根据提示进行操作,主要是输入 xunsearch 软件包的安装目录,强烈建议单独 规划一个目录,而不是混到别的软件目录中。
[root@cklocalhost ~]# mv xunsearch-full-1.4.15/ /usr/local/src/ [root@cklocalhost ~]# cd /usr/local/src/ [root@cklocalhost src]# cd xunsearch-full-1.4.15/ [root@cklocalhost xunsearch-full-1.4.15]# sh setup.sh +==========================================+ | Welcome to setup xunsearch(full) | | 欢迎使用 xunsearch (完整版) 安装程序 | +------------------------------------------+ | Follow the on-screen instructions please | | 请按照屏幕上的提示操作以完成安装 | +==========================================+ Please specify the installation directory 请指定安装目录 (默认为中括号内的值) [y]:/usr/local/xunsearch Confirm the installation directory 请确认安装目录:/usr/local/xunsearch [Y/n]Y Checking scws ... no Installing scws (1.2.3) ... Extracting scws package ... Configuring scws ... Compiling & installing scws ... Checking scws dict ... no Extracting scws dict file ... Checking libuuid ... no, try to install it Extracting libuuid package ... Configuring libuuid ... Compiling & installing libuuid ... Checking xapian-core-scws ... no Installing xapian-core-scws (1.4.17) ... Extracting xapian-core-scws package ... Configuring xapian-core-scws ... Compiling & installing xapian-core-scws ... Checking libevent ... no Installing libevent (2.0.21-stable) ... Extracting libevent package ... Configuring libevent ... Compiling & installing libevent ... Extracting xunsearch package (1.4.15) ... Configuring xunsearch ... Compiling & installing xunsearch ... Cleaning ... done +=================================================+ | Installation completed successfully, Thanks you | | 安装成功,感谢选择和使用 xunsearch | +-------------------------------------------------+ | 说明和注意事项: | | 1. 开启/重新开启 xunsearch 服务程序,命令如下: | | /usr/local/xunsearch/bin/xs-ctl.sh restart | 强烈建议将此命令写入服务器开机脚本中 | | | | 2. 所有的索引数据将被保存在下面这个目录中: | | /usr/local/xunsearch/data | 如需要转移到其它目录,请使用软链接。 | | | | 3. 您现在就可以在我们提供的开发包(SDK)基础上 | | 开发您自己的搜索了。 | | 目前只支持 PHP 语言,参见下面文档: | | /usr/local/xunsearch/sdk/php/README +=================================================+
第一次安装的话,过程可能会稍显漫长,请不必着急,您大可泡杯茶一边喝一边等待即可。
3)、待命令运行结束后,如果没有出错中断,则表示顺利安装完成,然后就可以启动/重新启动 xunsearch 的后台服务
cd $prefix ; bin/xs-ctl.sh restart bin/xs-ctl.sh -b local start // 监听在本地回环地址 127.0.0.1 上 bin/xs-ctl.sh -b inet start // 监听在所有本地 IP 地址上 bin/xs-ctl.sh -b a.b.c.d start // 监听在指定 IP 上 bin/xs-ctl.sh -b unix start // 分别监听在 tmp/indexd.sock 和 tmp/searchd.sock // 我的安装路径是/usr/local/xunsearch [root@cklocalhost xunsearch-full-1.4.15]# cd /usr/local/xunsearch [root@cklocalhost xunsearch]# bin/xs-ctl.sh restart INFO: starting server[xs-indexd] ... (BIND:127.0.0.1:8383) INFO: starting server[xs-searchd] ... (BIND:127.0.0.1:8384)
4)、将xunsearch设置为开机启动(可选)
编辑文件:vim /etc/rc.local,我这是个软连指向到的路径是 /etc/rc.d/rc.local ,添加如下内容:
[root@cklocalhost xunsearch]# vim /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local # 追加如下内容 # 完整启动的路径 && 启动命令 /usr/local/xunsearch/bin/xs-ctl.sh start
***划重点***
如果重启服务器发现讯搜服务没有启动,那是因为 /etc/rc.d/rc.local 文件没有执行权限,给予执行权限就可以了
# 给予执行权限 chmod +x /etc/rc.d/rc.local
重启服务器就可以开机启动了,至此完成。
5)、重启虚拟机,查看端口号,看服务是否自动启动
[root@cklocalhost ~]# netstat -nultp ###该命令是查看当前所有已经使用的端口情况 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 7062/php-fpm: maste tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 7454/X tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6797/nginx: master tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 7466/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6711/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 6719/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6898/master tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 7839/sshd: root@pts tcp 0 0 127.0.0.1:8383 0.0.0.0:* LISTEN 6791/xs-indexd: ser tcp 0 0 127.0.0.1:8384 0.0.0.0:* LISTEN 7055/xs-searchd: ma tcp6 0 0 :::3306 :::* LISTEN 7053/mysqld tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::6000 :::* LISTEN 7454/X tcp6 0 0 :::22 :::* LISTEN 6711/sshd tcp6 0 0 ::1:631 :::* LISTEN 6719/cupsd tcp6 0 0 ::1:25 :::* LISTEN 6898/master tcp6 0 0 ::1:6010 :::* LISTEN 7839/sshd: root@pts udp 0 0 192.168.122.1:53 0.0.0.0:* 7466/dnsmasq udp 0 0 0.0.0.0:67 0.0.0.0:* 7466/dnsmasq udp 0 0 0.0.0.0:68 0.0.0.0:* 6514/dhclient udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp 0 0 0.0.0.0:5353 0.0.0.0:* 6274/avahi-daemon: udp 0 0 127.0.0.1:323 0.0.0.0:* 6442/chronyd udp 0 0 0.0.0.0:43416 0.0.0.0:* 6274/avahi-daemon: udp 0 0 0.0.0.0:931 0.0.0.0:* 6268/rpcbind udp6 0 0 :::111 :::* 1/systemd udp6 0 0 ::1:323 :::* 6442/chronyd udp6 0 0 :::931 :::* 6268/rpcbind
6)、将xunsearch目录添加到系统变量(可选)
## 编辑 vi /etc/profile ,将xunsearch启动脚本所在目录添加到系统变量中 [root@cklocalhost ~]# vi /etc/profile export PATH=$PATH:/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/xunsearch/bin ## 重启让配置立即生效 [root@cklocalhost ~]# source /etc/profile ## 使用 [root@cklocalhost ~]# xs-ctl.sh stop INFO: stopping server[xs-indexd] (BIND:127.0.0.1:8383) .... [OK] INFO: stopping server[xs-searchd] (BIND:127.0.0.1:8384) .... [OK] [root@cklocalhost ~]# xs-ctl.sh start INFO: starting server[xs-indexd] ... (BIND:127.0.0.1:8383) INFO: starting server[xs-searchd] ... (BIND:127.0.0.1:8384)
安装 PHP-SDK
PHP-SDK 的代码不需要另行下载,已经包含在 xunsearch 的安装结果中了,在此假设您将 xunsearch 安装在 $prefix 目录,那么 $prefix/sdk/php 即是 PHP-SDK 的代码目录。目录结构及功能逻列如下:
_ |- doc/ 离线 HTML 版相关文档 |- app/ 用于存放搜索项目的 ini 文件 |- lib/XS.php 入口文件,所有搜索功能必须且只需包含此文件 \- util/ 辅助工具程序目录 |- RequireCheck.php 用于检测您的 PHP 环境是否符合运行条件 |- IniWizzaard.php 用于帮助您编写 xunsearch 项目配置文件 |- Quest.php 搜索测试工具 \- Indexer.php 索引管理工具
如果您的搜索应用程序和 xunsearch 在同一台服务器,则无需复制任何代码,在开发的时候直接包含 入口文件 $prefix/sdk/php/lib/XS.php 即可。代码如下:
require_once '/usr/local/xunsearch/sdk/php/lib/XS.php';
如果您在其它服务器部署前端搜索代码,请将 SDK 代码整个目录复制到相应的服务器上,但并不要求放到 web 可访问目录,考虑安全性也不推荐这么做。
Note: 对于前端和后端分离的用户来说,当 xunsearch 升级安装后必须重新复制安装后的 SDK 代码 去覆盖,否则可能造成版本不匹配导致错误。
检测 PHP-SDK 的运行条件
从现在开始的文档及示范代码中我们都假定您将 xunsearch 安装在 $prefix 目录中,而不再另行说明。
基础运行条件要求 PHP 最低版本为 5.2.0,随着功能需求的不同可能还会用到一些其它扩展,具体请在 命令行环境里运行我们提供的检测脚本。如果您的 php 可执行文件不在默认搜索路径中,假设是安装在 /path/to/bin/php 请使用第二种方式运行。运行方式如下:
1. $prefix/sdk/php/util/RequiredCheck.php 2. /path/to/bin/php $prefix/sdk/php/util/RequiredCheck.php 3. $prefix/sdk/php/util/RequiredCheck.php -c gbk
运行结果输出的中文编码默认为 UTF-8 ,如果您使用 GBK 环境请在运行命令最后加上 -c GBK 。 运行结果会给出一个可视化的表格说明检测结果,并在最终给出检测结论,告诉您是否符合运行的基础要求。
至此,安装和准备工作已经完成了,您可以开始使用 Xunsearch PHP-SDK 开发自己的搜索应用了。
[root@cklocalhost www.laravel.com]# /usr/local/xunsearch/sdk/php/util/RequiredCheck.php Xunsearch PHP-SDK 运行需求检查 ============================== 检查内容 -------- 本程序用于确认您的服务器配置是否能满足运行 Xunsearch PHP-SDK 的要求。 它将检查服务器所运行的 PHP 版本,查看是否安装了合适的PHP扩展模块,以及 确认 php.ini 文件是否正确设置。 +------------+------------+--------------------------+--------------------------------+ | 项目 | 结果 | 用于 | 备注 | +------------+------------+--------------------------+--------------------------------+ | PHP 版本 | 7.3.0 | XS(core) | PHP 5.2.0 或更高版本是必须的。 | | SPL 扩展 | OK | XS(core) | SPL 扩展用于自动加载和对象戏法 | | PCRE 扩展 | OK | XSDocument, XSSearch | 用于字符串切割、判断 | | 编码转换 | mbstring | XSDocument, XSSearch | 用于支持非 UTF-8 字符集 | | 缓存模块 | WARNING | XS | 用于缓存项目配置文件的解析结果 | | JSON 扩展 | OK | util.Quest, util.Indexer | 用于读取或输出 JSON 格式的数据 | | XML 扩展 | OK | util.Indexer | 用于读取导入 XML 格式的数据 | | MySQL 扩展 | mysqli | util.Indexer | 用于读取导入 MySQL 的数据库 | | SQLite 扩 | sqlite3 | util.Indexer | 用于读取导入 SQLite 的数据库 | +------------+------------+--------------------------+--------------------------------+ 检查结果 -------- 共计 8 项通过,1 项警告,0 项错误。 您的服务器配置符合 Xunsearch/PHP-SDK 的最低要求。 如果您需要使用特定的功能,请关注上述的 WARNING 项。 [root@cklocalhost www.laravel.com]#
完全删除 Xunsearch
首先欢迎对 xunsearch 提出各种修改、改进建议,我们都会认真对待和处理。如果有一天您真的不再需要 xunsearch 了,那么只要停止运行后端服务,然后完全删除它的安装目录 $prefix 即可,整个软件包 所有涉及的文件均在该目录下。
Note: 如果您的安装目录没有单独设置,而是使用公共目录(如:/usr/local),请勿直接删除整个目录。
$prefix/bin/xs-ctl.sh faststop rm -fr $prefix
从 Git 源码仓库安装
Note: 在开始安装前,无论如何请先安装一次最新发布的完整版本,以便将所有的运行依赖库安装到位。
我们的源代码托管在 github 上。您可以直接浏览代码仓库,也可以通过以下方式之一取得源代码:
git clone git://github.com/hightman/xunsearch.git git clone https://github.com/hightman/xunsearch.git
如果要编译安装这份源代码,您还必须在主机环境上安装相关的 autoconf, automake 工具,然后运行 下面指令完成准备工作。
cd xunsearch/ chmod +x acprep ./acprep
在完成上述的准备工作后,接下来编译安装 xunsearch 就和常见的开源软件类似,假设您的安装目录为 $prefix,然后按以下步骤操作即可:
./configure --prefix=$prefix make make install
开发流程
为便于讲解说明,假定 PHP-SDK 代码目录为 $sdk 。
分析搜索需求,设计搜索应用必需的字段。
编写项目配置文件,项目配置 ini 文件存放在 $sdk/app 目录。
引入 $sdk/lib/XS.php 进行搜索功能和界面开发,借助 $sdk/util/*.php 工具进行测试或调试。
认识对象
XS — 搜索项目总对象,所有相关操作均基于此对象及子方法。
XSDocument — 搜索结果或索引文档,包括一组字段及值,相当于 SQL 表中的一条记录。
XSIndex — 索引管理,通过 XS 对象的 index 属性取得。
XSSearch — 搜索功能,通过 XS 对象的 search 属性取得。
XSException — 异常类型,必须捕捉此异常以判断操作是否正确
基本实践:
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk // 创建对象 $xs = new XS('demo'); // 查询 $docs = $xs->search->search('测试'); // 输出 print_r($docs);
异常捕获
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk try{ $xs = new XS('demo'); $docs = $xs->search->setQuery('测试')->setLimit(5)->search(); foreach ($docs as $doc) { echo $doc->rank() . ". " . $doc->subject . " [" . $doc->percent() . "%]\n"; echo $doc->message . "\n"; } } catch (XSException $e) { echo $e; // 直接输出异常描述 if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况 echo "\n" . $e->getTraceAsString() . "\n"; }
XSDocument 文档
docid() 取得搜索结果文档的 docid 值 (实际数据库内的 id,一般用不到) rank() 取得搜索结果文档的序号值 (第X条结果) percent() 取得搜索结果文档的匹配百分比 (结果匹配度, 1~100) weight() 取得搜索结果文档的权重值 (浮点数) ccount() 取得搜索结果折叠的数量 (按字段折叠搜索时才有效)
添加操作
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk echo "<pre>"; try { $xs = new XS('demo'); $doc = new XSDocument(); $doc->pid = 5; $doc->subject = "Hello,XS"; $doc->message = "Hello,XS内容"; $res = $xs->index->add($doc)->flushIndex(); var_dump($res); } catch (XSException $e) { echo $e; // 直接输出异常描述 if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况 echo "\n" . $e->getTraceAsString() . "\n"; }
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk echo "<pre>"; try { $xs = new XS('demo'); $doc = new XSDocument(); $doc->pid = 6; $doc->subject = "Hello,XS6"; $doc->message = "Hello,XS内容6"; $res = $xs->index->add($doc)->flushIndex(); var_dump($res); } catch (XSException $e) { echo $e; // 直接输出异常描述 if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况 echo "\n" . $e->getTraceAsString() . "\n"; }
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk echo "<pre>"; try { $xs = new XS('demo'); $doc = new XSDocument(); $doc->pid = 7; $doc->subject = "Hello,XS7"; $doc->message = "Hello,XS内容7"; $res = $xs->index->add($doc)->flushIndex(); var_dump($res); } catch (XSException $e) { echo $e; // 直接输出异常描述 if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况 echo "\n" . $e->getTraceAsString() . "\n"; }
建立索引的过程会有点延迟!
$index->add($doc)->flushIndex()
可以临时处理成同步的。
ini初始化配置
string 字符型,适用多数情况,也是默认值 numeric 数值型,包含整型和浮点数,仅当字段需用于以排序或区间检索时才设为该类型,否则请使用 string 即可 date 日期型,形式为 YYYYmmdd 这样固定的 8 字节,如果没有区间检索或排序需求不建议使用 id 主键型,确保每条数据具备唯一值,是索引更新和删除的凭据,每个搜索项目必须有且仅有一个 id 字段,该字段的值不区分大小写 title 标题型,标题或名称字段,至多有一个该类型的字段 body 内容型,主内容字段, 即本搜索项目中内容最长的字段,至多只有一个该类型字段,本字段不支持字段检索 格式: type = string
/usr/local/xunsearch/sdk/php/app 目录,新建 sample.ini 文件,编辑内容如下:
project.name = sample project.default_charset = utf-8 server.index = 8383 server.search = 8384 [pid] type = id [subject] type = title [message] type = body [dateline] type = numeric [author] index = both [authorid] [tid] index = self tokenizer = full [fid] index = self tokenizer = full [flag]
更新、修改文档
如果索引数据库中已存在主键值相同的文档,那么相当于先删除原有的文档,再用当前文档替换它。 如果未存在主键值相同的文档,则效果和添加文档完全一致。
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk echo "<pre>"; try { $xs = new XS('demo'); $doc = new XSDocument(); $data = array( 'pid' => 10, // 此字段为主键,是进行文档替换的唯一标识 'subject' => '测试文档的标题', 'message' => '测试文档的内容部分', 'chrono' => time() ); $doc->setFields($data); // 更新到索引数据库中 $res = $xs->index->update($doc)->flushIndex(); var_dump($res); } catch (XSException $e) { echo $e; // 直接输出异常描述 if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况 echo "\n" . $e->getTraceAsString() . "\n"; }
删除文档
1.按主键删除
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk // 创建xs $xs = new XS('demo'); // 创建index $index = $xs->index; // 删除 $index->del('1')->flushIndex(); // 删除 $index->del(['4','5'])->flushIndex();
2.按内容删除
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk // 创建xs $xs = new XS('demo'); // 创建index $index = $xs->index; // 删除 $index->del('测试','subject')->flushIndex();
此外删除操作和添加文档一样,也是一个异步行为。
清空索引
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk // 创建xs $xs = new XS('demo'); // 创建index $index = $xs->index; // 删除 $index->clean();
平滑重建索引
require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk // 创建xs $xs = new XS('demo'); // 创建index $index = $xs->index; // 宣布开始重建索引 $index->beginRebuild(); // 然后在此开始添加数据 $data = array( 'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识 'subject' => '测试文档的标题', 'message' => '测试文档的内容部分', 'chrono' => time() ); // 创建文档对象 $doc = new XSDocument; $doc->setFields($data); $index->add($doc); // 告诉服务器重建完比 $index->endRebuild();
使用索引缓冲区
一次性提交服务操作
require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk // 创建xs $xs = new XS('demo'); // 创建index $index = $xs->index; // 开启缓冲区,默认 4MB,如 $index->openBuffer(8) 则表示 8MB $index->openBuffer(); // 然后在此开始添加数据 $data = array( 'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识 'subject' => '测试文档的标题', 'message' => '测试文档的内容部分', 'chrono' => time() ); // 创建文档对象 $doc = new XSDocument; $doc->setFields($data); // 在此进行批量的文档添加、修改、删除操作 $index->add($doc); $index->add($doc); $index->add($doc); $index->add($doc); $index->add($doc); $index->add($doc); $index->closeBuffer(); // 关闭缓冲区,必须和 openBuffer 成对使用
自定义 SCWS 词库
1.全局自定义词库
$prefix/etc/dict_user.txt
# Custom dictionary for scws (UTF-8 encoding) # 每行一条记录,以 # 开头的号表示注释忽略 # 每行最多包含 4 个字段,依次代表 "词条" "TF" "IDF" "词性" # 字段之间用空格或制表符分开,特殊词性 "!" 用于表示删除该词 # 参见 scws 自定义词典帮助: # http://bbs.xunsearch.com/showthread.php?tid=1303 # $Id$ # # WORD TF IDF ATTR # ------------------------------------------------------
2.项目自定义词库(这个貌似更好的读取)
$prefix/data/项目名称/dict_user.txt
测试,新建 test.php ,全文检索
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk $keyword = trim($_REQUEST['keyword']); // 接收关键词 $xs = new XS('demo'); // test 为项目名称,配置文件是:/usr/local/xunsearch/sdk/php/app $search = $xs->search; // 获取搜索对象 $search->setLimit(20); $docs = $search->setQuery( $keyword )->search(); // 搜索 ‘测试’ // echo "<pre>"; echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>id</th><th>姓名</th><th>年领</th></tr>"; foreach ($docs as $doc) { $pid = $doc->pid; $message = $doc->message; $subject = $doc->subject; // 高亮处理标题 echo "<tr><td>".$pid."</td><td>".$subject."</td><td>".$message."</td></tr>"; } echo "</table>"; // $search->setQuery($keyword); // // 获取前 6 个和默认搜索语句 "西湖" 相关搜索词 // $words = $search->getRelatedQuery(); // print_r($words);
新建数据库 test, 表test2,添加表数据
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | +--------------------+ 4 rows in set (0.55 sec) MariaDB [(none)]> create database test2; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | school | | test2 | +--------------------+ 5 rows in set (0.00 sec) MariaDB [(none)]> use test2; Database changed MariaDB [test2]> CREATE TABLE `test` ( -> `id` int(11) NOT NULL AUTO_INCREMENT, -> `name` varchar(255) DEFAULT NULL, -> `age` int(11) DEFAULT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.17 sec) MariaDB [test2]> INSERT INTO `test` VALUES ('1', 'aa', '10'); Query OK, 1 row affected (0.00 sec) MariaDB [test2]> INSERT INTO `test` VALUES ('2', 'bb', '20'); Query OK, 1 row affected (0.00 sec) MariaDB [test2]> INSERT INTO `test` VALUES ('3', 'cc', '30'); Query OK, 1 row affected (0.00 sec) MariaDB [test2]> INSERT INTO `test` VALUES ('4', 'dd', '20'); Query OK, 1 row affected (0.00 sec) MariaDB [test2]> INSERT INTO `test` VALUES ('5', 'ee', '20'); Query OK, 1 row affected (0.00 sec) MariaDB [test2]> INSERT INTO `test` VALUES ('6', 'ff', '30'); Query OK, 1 row affected (0.00 sec) MariaDB [test2]>
新建配置文件 frist.ini
推荐使用我们的在线工具编写:http://www.xunsearch.com/tools/iniconfig
[root@cklocalhost ~]#/usr/local/xunsearch/sdk/php/app [root@cklocalhost app]# vim frist.ini project.name = frist project.default_charset = utf-8 server.index = 192.168.142.130:8383 server.search = 192.168.142.130:8384 [id] type = id [name] type = body [age] type = numeric
导入mysql数据到xunsearch里面:对应修改mysql登录用户名和密码
[root@cklocalhost app]# /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://yourdbuser:yourdbpass@127.0.0.1/test2 --sql="select id,name,age from test" --project=frist [XSErrorException] ../lib/XS.php(2558): fsockopen(): unable to connect to 192.168.142.130:8383 (Connection refused)(2) #0 [internal function]: xsErrorHandler(2, 'fsockopen(): un...', '/usr/local/xuns...', 2558, Array) #1 ../lib/XS.php(2558): fsockopen('192.168.142.130', 8383, 111, 'Connection refu...', 5) #2 ../lib/XS.php(2371): XSServer->connect() #3 ../lib/XS.php(2356): XSServer->open('192.168.142.130...') #4 ../lib/XS.php(371): XSServer->__construct('192.168.142.130...', Object(XS)) #5 ../lib/XS.php(263): XS->getIndex() #6 Indexer.php(157): XSComponent->__get('index') #7 {main}
如果 服务端xunsearch 的后台服务已经启动, 报错误 [XSErrorException] ../lib/XS.php(2558): fsockopen(): unable to connect to 192.168.142.130:8383 (Connection refused)(2)
修改配置文件 frist.ini:
[root@cklocalhost app]# /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://yourdbuser:yourdbpass@127.0.0.1/test2 --sql="select id,name,age from test" --project=frist 开始重建索引 ... 初始化数据源 ... mysql://root:123456@127.0.0.1/test2 开始批量导入数据 (请直接输入数据) ... 完成索引导入:成功 6 条,失败 0 条 完成重建索引 ...
Note:在批量导入各种数据源时,您可以加入 --clean
选项,该工具就会先清空现有索引数据库。
/usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://yourdbuser:yourdbpass@127.0.0.1/test2 --sql="select id,name,age from test" --project=frist --clear
获取全文搜索数据
<?php require '/usr/local/xunsearch/sdk/php/lib/XS.php';// 引入 xunsearch sdk $keyword = trim($_REQUEST['keyword']); // 接收关键词 $xs = new XS('frist'); // test 为项目名称,配置文件是:/usr/local/xunsearch/sdk/php/app $search = $xs->search; // 获取搜索对象 $search->setLimit(20); $docs = $search->setQuery( $keyword )->search(); // 搜索 ‘测试’ // echo "<pre>"; echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>id</th><th>姓名</th><th>年领</th></tr>"; foreach ($docs as $doc) { $pid = $doc->id; $name = $doc->name; $age = $doc->age; // 高亮处理标题 echo "<tr><td>".$pid."</td><td>".$name."</td><td>".$age."</td></tr>"; } echo "</table>";
参考:
XunSearch(讯搜)的使用教程步骤:https://blog.csdn.net/flancklin/article/details/52315968
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn