PHP 和 Elasticsearch:给你的应用加个强力搜索引擎

news/2025/9/19 8:44:18/文章来源:https://www.cnblogs.com/catchadmin/p/19100064

PHP 和 Elasticsearch:给你的应用加个强力搜索引擎

现在做 Web 应用,搜索功能基本是标配。不管你做电商、CMS 还是社交应用,用户都希望搜索又快又准。如果你用 PHP 开发,肯定遇到过数据库搜索的瓶颈——数据一多就慢得要死。这时候 Elasticsearch 就能帮大忙了。

这篇文章会告诉你怎么把 PHP 和 Elasticsearch 结合起来,让搜索速度飞起来。从安装配置到实际代码,都会讲到。

原文链接-PHP 和 Elasticsearch:给你的应用加个强力搜索引擎

Elasticsearch 是什么东西?

简单说,Elasticsearch 就是个基于 Apache Lucene 的分布式搜索引擎。专门用来处理大量数据,搜索速度贼快。跟传统的 SQL 数据库不一样,它特别擅长搜索非结构化数据,复杂查询也能在毫秒内搞定。

不管你要搜索文本、数字还是地理位置数据,Elasticsearch 都能搞定。文档、日志、实时数据,统统没问题。

为什么 PHP 要用 Elasticsearch?

PHP 做 Web 开发挺流行的,但遇到复杂搜索需求时,传统的 SQL 数据库就不够用了,性能和扩展性都跟不上。

PHP 配合 Elasticsearch 有这几个好处:

  1. 速度:Elasticsearch 针对大型数据集的快速实时搜索进行了优化。随着应用的增长,传统 SQL 查询可能在性能上遇到困难,但 Elasticsearch 可以处理数百万个文档并在毫秒内返回结果。

  2. 扩展性:随着应用用户群的增长,数据量也在增长。Elasticsearch 可以水平扩展,这意味着它可以处理海量数据而不牺牲性能。

  3. 高级搜索功能:Elasticsearch 支持模糊搜索、全文搜索、过滤器、聚合和相关性排名等高级搜索功能——这些功能用 SQL 查询实现往往很麻烦。

  4. 与 PHP 轻松集成:有几个库可用于将 Elasticsearch 与 PHP 集成,比如官方的 Elasticsearch PHP 客户端。这些库让你能够以 PHP 友好的方式与 Elasticsearch 交互并执行搜索操作。

在 PHP 中设置 Elasticsearch

在深入集成之前,让我们确保你有正确的环境设置。

  1. 安装 Elasticsearch:你可以在本地安装 Elasticsearch 或使用 Elastic Cloud 等云服务来托管你的 Elasticsearch 实例。对于本地安装,你可以从这里下载并安装 Elasticsearch。通过访问 http://localhost:9200 确保 Elasticsearch 在你的系统上运行。

  2. 安装 PHP 客户端:在 PHP 中与 Elasticsearch 交互的最简单方法是使用官方的 Elasticsearch PHP 客户端。通过 Composer 安装:

composer require elasticsearch/elasticsearch
  1. 创建 Elasticsearch 索引:一旦 Elasticsearch 启动并运行,你需要做的第一件事就是创建一个索引。索引就像 Elasticsearch 中的数据库,它将存储你的文档。
use Elasticsearch\ClientBuilder;$client = ClientBuilder::create()->build();$params = ['index' => 'products','body'  => ['mappings' => ['properties' => ['name' => ['type' => 'text'],'description' => ['type' => 'text'],'price' => ['type' => 'float']]]]
];$response = $client->indices()->create($params);
print_r($response);

使用 PHP 执行搜索查询

一旦你的 Elasticsearch 索引设置好了,你就可以开始索引数据并执行搜索。让我们看一个例子,你索引一些产品数据然后搜索它。

索引数据

$productData = ['name' => 'iPhone 13','description' => '具有出色功能的最新 iPhone 型号。','price' => 999.99
];$params = ['index' => 'products','body'  => $productData
];$response = $client->index($params);
print_r($response);

搜索数据

要搜索产品,使用 Elasticsearch 的搜索功能:

$params = ['index' => 'products','body'  => ['query' => ['match' => ['description' => 'iPhone']]]
];$response = $client->search($params);
print_r($response);

这将返回描述中包含"iPhone"一词的产品。Elasticsearch 支持 match、term 和 range 等高级查询,让你能够微调搜索功能。

Elasticsearch 中的高级搜索技术

Elasticsearch 不仅仅是一个简单的文本搜索工具。它提供了几种高级搜索技术,你可以用来增强 PHP 应用:

  1. 模糊搜索:非常适合处理拼写错误或搜索词的变体。
'query' => ['fuzzy' => ['name' => ['value' => 'iphon','fuzziness' => 'AUTO']]
]
  1. 分面搜索和聚合:这允许你按特定字段(如价格范围或类别)过滤和分组搜索结果。
'aggs' => ['price_ranges' => ['range' => ['field' => 'price','ranges' => [['to' => 500],['from' => 500, 'to' => 1000],['from' => 1000]]]]
]
  1. 自动完成:使用 edge_ngram 分词器在用户输入时提供建议。

Elasticsearch 在 PHP 应用中的实际应用

  1. 电商平台:快速的产品搜索对电商应用至关重要。Elasticsearch 可以按类别、价格范围、评分等过滤产品。eBay 和沃尔玛等大公司都在使用它。

  2. CMS 和博客:许多内容管理系统(CMS)使用 Elasticsearch 来索引文章并启用快速的全文搜索。

  3. 日志管理:Elasticsearch 经常用于日志聚合。Netflix 等公司使用 Elasticsearch 来管理和分析海量日志。

总结

将 Elasticsearch 集成到你的 PHP 应用中可以大幅提升搜索速度、准确性和扩展性。无论你在构建电商平台、内容管理系统,还是具有复杂搜索需求的应用,Elasticsearch 都是一个能够改变应用用户体验的工具。

通过利用 Elasticsearch 的强大功能,你可以创建更快、响应更迅速的搜索引擎,轻松处理即使是最大的数据集。那么,为什么不开始在你的下一个 PHP 项目中集成 Elasticsearch 呢?现在就是提升搜索功能的时候!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/907623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:SSH带外管理

深入解析:SSH带外管理2025-09-19 08:42 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

Windows 系统部署 Mosquitto MQTT broker 完整指南

一、前言/介绍简要介绍 Mosquitto 是什么(轻量级、开源 MQTT 消息代理)MQTT 协议的应用场景(IoT、移动应用、消息推送等)本文目标:在 Windows 系统上快速搭建一个可用的 MQTT 服务器二、下载与安装markdown 复制…

[Linux] shell脚本 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年- H146-Lc459. 重复的子字符串(字符串)--Java版 - 实践

2025年- H146-Lc459. 重复的子字符串(字符串)--Java版 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

坚果云 坚果 jianguoyun 怎么收文件?

怎么收文件? 坚果云 坚果 jianguoyun 怎么收文件?注册、登录、免费的空间是 1GB。创建新的收集 https://www.jianguoyun.com/d/home#/ 查看收集结果:https://www.jianguoyun.com/#/

mssql创建字段依赖

CREATE TABLE temp061_t ( ID INT IDENTITY(1,1) PRIMARY KEY, RoleType INT NOT NULL, isSior INT NULL ); ALTER TABLE temp061_t ADD CONSTRAINT chk_is_sior CHECK ( (RoleType = 1 AND isSior IS NULL) OR (RoleT…

一款多功能Linux服务器Web管理面板

为什么使用 Docker 部署 EasyNode? 正如您所说,Docker 部署具有显著优势: 环境隔离与一致性:所有依赖(Node.js, PM2等)都封装在容器内,与宿主机环境隔离,避免冲突。在任何支持 Docker 的 Linux 发行版上,体验…

2025.9.16 测试

2025.9.16 测试1. Problem A: 逆序对(reverse) 根据冒泡,只要逆序对个数够就有方案 经过思考,我们找到第一个操作个数大于的前缀,然后操作前一个前缀,这样前边变有序后,与当前数成逆序对一定是个后缀,然后根据需…

完整教程:C/C++:看简介吧= ̄ω ̄=(2)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

题解:P12558 [UOI 2024] Heroes and Monsters

题面: (这个没交洛谷,给学弟写的。) \(O(n^3)\) 考虑直接求出所有 \(ans_i\),前缀和回答询问。 \(a,b\) 先排序。由于我们只关心英雄的集合,所以怪兽我们贪心选择,如果我们选这个英雄那么选最前面的怪兽,否则选…

qt QHPieModelMapper详解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

webRTC golang 构建核心

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

数据分析与产品、运营、市场之间如何有效对齐 - 详解

数据分析与产品、运营、市场之间如何有效对齐 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

(附源码)基于Java的学生托管系统的设计与实现 - 实践

(附源码)基于Java的学生托管系统的设计与实现 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

agentgateway 简单试用

agentgateway 简单试用以下是一个简单示例,主要测试多mcp tools 的聚合,集成了基于litserve 的mcp server 以及genai toolbox 安装 目前github 上暂时未系统mac x86 架构的包,可以自己编译命令git clone https://gi…

SVG动画优化全攻略:从设计到性能提升

本文详细介绍了如何通过清洁设计、路径简化、代码分层和元素复用等技术优化SVG动画,涵盖工具选择、结构设计到CSS动画实现的全流程,帮助开发者创建高性能的SVG动画效果。粉碎动画第四部分:优化SVG SVG动画让我回想起…

深入解析:Go 1.25.1 自定义包调用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MX 练石 2026 NOIP #7

0 + 10 + 10 + 0 = 20, Rank 152/199.好难好难好难好难,为数不多的罚坐了。 4h20min 怒砍 20pts /ohMX 练石 2025 NOIP #6 链接:link 题解:link 时间:4h20min (2025.09.18 13:50~18:10) 题目数:4 难度:A B C D估…

多元积性函数

定义:若函数 \(f(n,m)\) 满足 \(ab \perp xy \Rightarrow f(ax,by)=f(a,b)f(x,y)\),则称 \(f\) 为二元积性函数。 积性分解:将 \(x=\prod p_i^{\alpha _i},y=\prod p_i^{\beta _i}\),则有 \(f(x,y)=\prod f(p_i^{\…

国内AI云市场:挤不进前三,生存将成问题!

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087中国AI云市场已形成“一大四强”的格局,阿里云以35.8%的份额独占鳌…