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

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

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

开始课程

Elasticsearch PHP客户端:elasticsearch-php



Elasticsearch 是一个基于 Apache Lucene 构建的强大分布式搜索引擎和分析数据库。为了从 PHP 应用程序与其交互,官方提供了一个客户端——elasticsearch-php。该库为所有操作提供了便捷且完整的 API:从文档索引到复杂的全文查询和聚合。



安装与连接



通过 Composer(PHP 的标准包管理器)进行安装:



composer require elasticsearch/elasticsearch


安装后,需要创建一个客户端实例,并指定您的 Elasticsearch 集群的主机(或多个主机):



<?phprequire 'vendor/autoload.php';

use Elastic\\Elasticsearch\\ClientBuilder;

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


对于安全连接(HTTPS、身份验证),可以传递额外参数:



$client = ClientBuilder::create()    ->setHosts(['https://user:password@my-elastic.cloud:9243'])    ->setSSLVerification(false) // 仅用于测试!    ->build();


基本数据操作



创建索引



Elasticsearch 中的索引类似于 SQL 中的数据库。在保存数据之前,可以显式地创建索引并指定映射:



$params = [    'index' => 'products',    'body' => [        'settings' => [            'number_of_shards' => 1,            'number_of_replicas' => 1        ],        'mappings' => [            'properties' => [                'title' => ['type' => 'text'],                'price' => ['type' => 'float'],                'created_at' => ['type' => 'date']            ]        ]    ]];

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


索引文档(添加/更新)



使用 index 方法添加单个文档:



$params = [    'index' => 'products',    'id' => '1',    'body' => [        'title' => '华硕 ROG 笔记本电脑',        'price' => 120000.00,        'created_at' => '2025-01-15'    ]];

$response = $client->index($params);


如果具有相同 id 的文档已存在,它将被覆盖。对于部分更新,请使用 update。



获取文档



$params = [    'index' => 'products',    'id' => '1'];

$response = $client->get($params);$document = $response['_source'];echo $document['title']; // 华硕 ROG 笔记本电脑


删除文档



$params = [    'index' => 'products',    'id' => '1'];

$response = $client->delete($params);


搜索与过滤



Elasticsearch 最强大的功能是全文搜索。按名称搜索商品的示例:



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

$response = $client->search($params);

// 处理结果foreach ($response['hits']['hits'] as $hit) { echo 'ID: ' . $hit['_id'] . ', 标题: ' . $hit['_source']['title'] . "";}


可以使用 bool 查询组合条件:



$params = [    'index' => 'products',    'body' => [        'query' => [            'bool' => [                'must' => [                    ['match' => ['title' => '笔记本电脑']]                ],                'filter' => [                    ['range' => ['price' => ['gte' => 50000                    

推荐