Elasticsearch PHP客户端:elasticsearch-php — 完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Elasticsearch PHP客户端(elasticsearch-php):强大的搜索与分析工具



Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索与分析系统。它能够近乎实时地存储、搜索和分析大量数据。为了从 PHP 应用程序与 Elasticsearch 交互,官方提供了客户端——elasticsearch-php。该库提供了便捷的 API,用于执行从文档索引到复杂搜索查询和聚合的所有操作。



本文将详细介绍 elasticsearch-php 的安装、配置及主要功能。您将学习如何连接到集群、创建索引、添加文档、执行搜索以及使用过滤和数据聚合等高级功能。



安装 elasticsearch-php



该库通过 Composer 分发。在项目根目录下执行以下命令进行安装:



composer require elasticsearch/elasticsearch


安装后,composer.json 文件中将出现该依赖项。请确保您已安装 PHP 7.4 或更高版本,并已启用 json 扩展。



连接到 Elasticsearch 服务器



第一步是创建客户端。对于本地服务器(默认情况下 Elasticsearch 监听 9200 端口),代码如下:



<?phprequire 'vendor/autoload.php';

use Elastic\\Elasticsearch\\ClientBuilder;

$client = ClientBuilder::create() ->setHosts(['localhost:9200']) ->build();?>


如果您的服务器需要身份验证(例如通过用户名/密码或 API 密钥),请传递参数:



$client = ClientBuilder::create()    ->setHosts(['https://user:pass@localhost:9200'])    ->setSSLVerification(false) // 仅用于开发环境    ->build();


索引与文档操作



Elasticsearch 将数据存储在索引中(类似于 SQL 中的表)。让我们创建一个带有简单映射的 products 索引:



$params = [    'index' => 'products',    'body' => [        'settings' => [            'number_of_shards' => 1,            'number_of_replicas' => 0        ],        'mappings' => [            'properties' => [                'title' => ['type' => 'text'],                'price' => ['type' => 'float'],                'description' => ['type' => 'text'],                'category' => ['type' => 'keyword']            ]        ]    ]];

$response = $client->indices()->create($params);


现在添加几个文档:



$documents = [    ['title' => '戴尔 XPS 15 笔记本电脑', 'price' => 1200.00, 'description' => '适用于工作的强大超极本', 'category' => 'electronics'],    ['title' => '《PHP 专业开发》书籍', 'price' => 45.50, 'description' => '深入学习 PHP 高级知识', 'category' => 'books'],    ['title' => '索尼 WH-1000XM5 耳机', 'price' => 350.00, 'description' => '带降噪功能的无线耳机', 'category' => 'electronics']];

foreach ($documents as $id => $doc) { $params = [ 'index' => 'products', 'id' => $id + 1, 'body' => $doc ]; $response = $client->index($params);}


搜索文档



在 title 字段上执行全文搜索:



$params = [    'index' => 'products',    'body' => [        'query' => [            'match' => [                'title' => '笔记本电脑'            ]        ]    ]];

$response = $client->search($params);$hits = $response['hits']['hits'];

foreach ($hits as $hit) { echo "ID: " . $hit['_id'] . " | 标题: " . $hit['_source']['title'] . " | 价格: " . $hit['_source']['price'] . "";}

推荐