0

0

Laravel xunsearch 全文搜索

高洛峰

高洛峰

发布时间:2017-02-09 09:55:20

|

2861人浏览过

|

来源于php中文网

原创

开始之前强烈推荐先浏览一下 xunsearch 的官方文档

字狐AI
字狐AI

由GPT-4 驱动的AI全能助手,支持回答复杂问题、撰写邮件、阅读文章、智能搜索

下载

Xunsearch简介

Xunsearch 是一个高性能、全功能的全文检索解决方案。Xunsearch 旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。

详情点我

测试环境:

Linux 服务器 2 台:

代号 功能 IP 系统
服务器A 提供web服务 192.168.56.2 centos7
服务器B 提供 xunsearch 后端服务 192.168.56.3 centos7

xunsearch 后端服务器配置:

PHP版本 7.0.13 没有安装缓存, 生产环境推荐安装缓存

PHP 7.0.13 (cli) (built: Dec 21 2016 13:53:31) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans

连接到服务器B 运行下面指令安装, 解压 xunsearch 安装包

wget http://www.php.cn/
tar -xjf xunsearch-full-latest.tar.bz2

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

cd xunsearch-full-1.4.10/
sh setup.sh

之后会显示安装的交互界面, 然后直接按下回车,安装到默认路径下,
然后喝杯咖啡, 稍等一会 出现下面的安装成功提示即可.

+==========================================+
| Welcome to setup xunsearch(full)         |
| 欢迎使用 xunsearch (完整版) 安装程序       |
+------------------------------------------+
| Follow the on-screen instructions please |
| 请按照屏幕上的提示操作以完成安装            |
+==========================================+

Please specify the installation directory
请指定安装目录 (默认为中括号内的值)
[/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.2.22) ... 
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.10) ...
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          |
+=================================================+

注意: 如果是生产环境iptables可能需要配置得严格,本文仅为测试

配置一下iptables, 如果你没有启用那么忽略本操作

vi /etc/sysconfig/iptables

加入, 下面两行

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8383 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8384 -j ACCEPT

重启iptables
service iptables restart

启动服务

/usr/local/xunsearch/bin/xs-ctl.sh -b inet start

启动输出内容:

INFO: starting server[xs-indexd] ... (BIND:8383)
INFO: starting server[xs-searchd] ... (BIND:8384)

web服务器配置

安装xunsearch PHP SDK

cd project/root/path
composer require --prefer-dist hightman/xunsearch

创建项目配置文件, 一个项目对应一个配置文件, 项目名称不能重复

cp app\vendor\hightman\xunsearch\app\demo.ini app\config\search-demo.ini

修改刚刚创建的文件的内容, 其中server.index 和 server.search 的IP地址是安装了xunsearch服务的服务器IP地址

;搜索配置文件示例
project.name = demo
project.default_charset = utf-8
server.index = 192.168.56.4:8383
server.search = 192.168.56.4:8384

[pid]
type = id

[subject]
type = title

[message]
type = body

[chrono]
type = numeric

修改 app/routes/web.php 文件, 写入一些客户端搜索测试代码

###################### 测试模块 ####################
/*
 * 全文搜索测试部分
 */
Route::get('/search/{key}', function ($key){
    $xs = new XS(config_path('search-demo.ini'));
    $search = $xs->search; // 获取 搜索对象
    $query = $key;
    $search->setQuery($query)
        ->setSort('chrono', true) //按照chrono 正序排列
        ->setLimit(20,0) // 设置搜索语句, 分页, 偏移量
    ;

    $docs = $search->search(); // 执行搜索,将搜索结果文档保存在 $docs 数组中
    $count = $search->count(); // 获取搜索结果的匹配总数估算值
    foreach ($docs as $doc){
        $subject = $search->highlight($doc->subject); // 高亮处理 subject 字段
        $message = $search->highlight($doc->message); // 高亮处理 message 字段
        echo $doc->rank() . '. ' . $subject . " [" . $doc->percent() . "%] - ";
        echo date("Y-m-d", $doc->chrono) . "<br>" . $message . "<br>";
        echo '<br>========<br>';
    }
    echo  '总数:'. $count;
});

Route::get('/makedoc/{title}/{message}', function ($title, $message){
    $xs = new XS('demo');
    $doc = new XSDocument;
    $doc->setFields([
        'pid' => 1,
        'subject' => $title,
        'message' => $message,
        'chrono' => time(),
    ]); // 用数组进行批量赋值
    $xs->index->add($doc);
});

使用浏览器访问上面两个路由来测试功能

通过访问: http://你的域名/makedoc/标题/内容 测试生成索引

测试例子:

http://你的域名/makedoc/关于 xunsearch 的 DEMO 项目测试/项目测试是一个很有意思的行为!

http://你的域名/makedoc/测试第二篇/这里是第二篇文章的内容

http://你的域名/makedoc/项目测试第三篇/俗话说,无三不成礼,所以就有了第三篇

注意: 索引不是即时生效的 延迟大概在10秒左右

通过访问: http://你的域名/search/关键词 测试搜索功能
比如搜索关键词 项目

1. 关于 xunsearch 的 DEMO 项目测试 [99%] - 2011-08-26
项目测试是一个很有意思的行为!

========
2. 项目测试第三篇 [100%] - 2011-08-26
俗话说,无三不成礼,所以就有了第三篇

========
总数:2

通过上述步骤我们就完成了一个最简单的全文搜索例子.
如果希望了解更多详细内容, 请阅读xunsearch的官方文档.

参考内容

  1. xunsearch 官方文档


开始之前强烈推荐先浏览一下 xunsearch 的官方文档

Xunsearch简介

Xunsearch 是一个高性能、全功能的全文检索解决方案。Xunsearch 旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。

详情点我

测试环境:

Linux 服务器 2 台:

代号 功能 IP 系统
服务器A 提供web服务 192.168.56.2 centos7
服务器B 提供 xunsearch 后端服务 192.168.56.3 centos7

xunsearch 后端服务器配置:

PHP版本 7.0.13 没有安装缓存, 生产环境推荐安装缓存

PHP 7.0.13 (cli) (built: Dec 21 2016 13:53:31) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans

连接到服务器B 运行下面指令安装, 解压 xunsearch 安装包

wget http://www.php.cn/
tar -xjf xunsearch-full-latest.tar.bz2

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

cd xunsearch-full-1.4.10/
sh setup.sh

之后会显示安装的交互界面, 然后直接按下回车,安装到默认路径下,
然后喝杯咖啡, 稍等一会 出现下面的安装成功提示即可.

+==========================================+
| Welcome to setup xunsearch(full)         |
| 欢迎使用 xunsearch (完整版) 安装程序       |
+------------------------------------------+
| Follow the on-screen instructions please |
| 请按照屏幕上的提示操作以完成安装            |
+==========================================+

Please specify the installation directory
请指定安装目录 (默认为中括号内的值)
[/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.2.22) ... 
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.10) ...
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          |
+=================================================+

注意: 如果是生产环境iptables可能需要配置得严格,本文仅为测试

配置一下iptables, 如果你没有启用那么忽略本操作

vi /etc/sysconfig/iptables

加入, 下面两行

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8383 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8384 -j ACCEPT

重启iptables
service iptables restart

启动服务

/usr/local/xunsearch/bin/xs-ctl.sh -b inet start

启动输出内容:

INFO: starting server[xs-indexd] ... (BIND:8383)
INFO: starting server[xs-searchd] ... (BIND:8384)

web服务器配置

安装xunsearch PHP SDK

cd project/root/path
composer require --prefer-dist hightman/xunsearch

创建项目配置文件, 一个项目对应一个配置文件, 项目名称不能重复

cp app\vendor\hightman\xunsearch\app\demo.ini app\config\search-demo.ini

修改刚刚创建的文件的内容, 其中server.index 和 server.search 的IP地址是安装了xunsearch服务的服务器IP地址

;搜索配置文件示例
project.name = demo
project.default_charset = utf-8
server.index = 192.168.56.4:8383
server.search = 192.168.56.4:8384

[pid]
type = id

[subject]
type = title

[message]
type = body

[chrono]
type = numeric

修改 app/routes/web.php 文件, 写入一些客户端搜索测试代码

###################### 测试模块 ####################
/*
 * 全文搜索测试部分
 */
Route::get('/search/{key}', function ($key){
    $xs = new XS(config_path('search-demo.ini'));
    $search = $xs->search; // 获取 搜索对象
    $query = $key;
    $search->setQuery($query)
        ->setSort('chrono', true) //按照chrono 正序排列
        ->setLimit(20,0) // 设置搜索语句, 分页, 偏移量
    ;

    $docs = $search->search(); // 执行搜索,将搜索结果文档保存在 $docs 数组中
    $count = $search->count(); // 获取搜索结果的匹配总数估算值
    foreach ($docs as $doc){
        $subject = $search->highlight($doc->subject); // 高亮处理 subject 字段
        $message = $search->highlight($doc->message); // 高亮处理 message 字段
        echo $doc->rank() . '. ' . $subject . " [" . $doc->percent() . "%] - ";
        echo date("Y-m-d", $doc->chrono) . "<br>" . $message . "<br>";
        echo '<br>========<br>';
    }
    echo  '总数:'. $count;
});

Route::get('/makedoc/{title}/{message}', function ($title, $message){
    $xs = new XS('demo');
    $doc = new XSDocument;
    $doc->setFields([
        'pid' => 1,
        'subject' => $title,
        'message' => $message,
        'chrono' => time(),
    ]); // 用数组进行批量赋值
    $xs->index->add($doc);
});

使用浏览器访问上面两个路由来测试功能

通过访问: http://你的域名/makedoc/标题/内容 测试生成索引

测试例子:

http://你的域名/makedoc/关于 xunsearch 的 DEMO 项目测试/项目测试是一个很有意思的行为!

http://你的域名/makedoc/测试第二篇/这里是第二篇文章的内容

http://你的域名/makedoc/项目测试第三篇/俗话说,无三不成礼,所以就有了第三篇

注意: 索引不是即时生效的 延迟大概在10秒左右

通过访问: http://你的域名/search/关键词 测试搜索功能
比如搜索关键词 项目

1. 关于 xunsearch 的 DEMO 项目测试 [99%] - 2011-08-26
项目测试是一个很有意思的行为!

========
2. 项目测试第三篇 [100%] - 2011-08-26
俗话说,无三不成礼,所以就有了第三篇

========
总数:2

通过上述步骤我们就完成了一个最简单的全文搜索例子.
如果希望了解更多详细内容, 请阅读xunsearch的官方文档.

更多Laravel xunsearch 全文搜索 相关文章请关注PHP中文网!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

Golang 性能优化专题:提升应用效率
Golang 性能优化专题:提升应用效率

《Golang 性能优化专题》聚焦 Go 应用在高并发与大规模服务中的性能问题,从 profiling、内存分配、Goroutine 调度、GC 机制到 I/O 与锁竞争逐层分析。结合真实案例讲解定位瓶颈的方法与优化策略,帮助开发者建立系统化性能调优思维,在保证代码可维护性的同时显著提升服务吞吐与稳定性。

2

2026.02.24

Golang 面试题精选:高频问题与解答
Golang 面试题精选:高频问题与解答

Golang 面试题精选》系统整理企业常见 Go 技术面试问题,覆盖语言基础、并发模型、内存与调度机制、网络编程、工程实践与性能优化等核心知识点。每道题不仅给出答案,还拆解背后的设计原理与考察思路,帮助读者建立完整知识结构,在面试与实际开发中都能更从容应对复杂问题。

1

2026.02.24

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

3

2026.02.24

Golang 疑难杂症解决指南:常见问题排查与优化
Golang 疑难杂症解决指南:常见问题排查与优化

《Golang 疑难杂症解决指南》聚焦开发过程中常见却棘手的问题,从并发模型、内存管理、性能瓶颈到工程化实践逐步拆解。通过真实案例与调试思路,帮助开发者定位问题根因,建立系统化排查方法。不只给出答案,更强调分析路径与工具使用,让你在复杂 Go 项目中具备持续解决问题的能力。

1

2026.02.24

Golang 入门学习路线:从零基础到上手开发
Golang 入门学习路线:从零基础到上手开发

Golang 入门路线涵盖从零到上手的核心路径:首先打牢基础语法与切片等底层机制;随后攻克 Go 的灵魂——接口设计与 Goroutine 并发模型;接着通过 Gin 框架与 GORM 深入 Web 开发实战;最后在微服务与云原生工具开发中进阶,旨在培养具备高性能并发处理能力的后端工程师。

0

2026.02.24

中国研究生招生信息网官方网站入口 研招网网页版在线入口
中国研究生招生信息网官方网站入口 研招网网页版在线入口

中国研究生招生信息网入口(https://yz.chsi.com.cn) 此网站是研究生报名入口的唯一官方网站

95

2026.02.24

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

14

2026.02.24

Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址
Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址

本专题系统整理Asianfanfics(AFF)官方网站最新可用入口,涵盖官方平台最新直达地址、官网登录方式及中文访问指引,帮助用户快速、安全地进入AFF平台浏览与使用相关内容。

15

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号