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