文档首页/ 云搜索服务 CSS/ 用户指南/ Elasticsearch/ 访问Elasticsearch集群/ 通过PHP客户端接入Elasticsearch集群
更新时间:2026-01-09 GMT+08:00
分享

通过PHP客户端接入Elasticsearch集群

在大数据搜索和分析场景中,开发者通常需要通过编程语言进行数据访问和管理操作。然而,直接使用Elasticsearch的HTTP API进行编程不仅代码复杂度高,而且容易出错,影响开发效率。为了简化开发流程,CSS服务的Elasticsearch集群支持通过官方Elasticsearch PHP客户端进行数据访问和管理操作。该客户端库(elasticsearch-php)提供了完整的Elasticsearch API封装,开发者可通过PHP原生接口实现索引管理、文档CRUD、搜索查询等操作。

前提条件

  • Elasticsearch集群处于可用状态。
  • 运行PHP代码的服务器与Elasticsearch集群之间网络互通。
  • 根据集群的网络配置方式,获取集群的访问地址,操作指导请参见网络配置
  • 确认服务器已安装Elasticsearch PHP客户端,操作指导请参见Elasticsearch PHP Client

    本文服务器安装的PHP版本是8.0.30,Composer版本是2.9.2,Elasticsearch PHP客户端版本是7.17.2,连接的Elasticsearch集群版本是7.10.2。

安装PHP客户端库

在运行PHP代码的服务器中安装PHP客户端库。

yum install -y php

接入集群

当使用PHP客户端访问不同安全类型的Elasticsearch集群时,示例代码会有差异,请根据实际业务场景选择参考文档。

表1 接入集群的场景介绍

Elasticsearch集群安全类型

参考文档

非安全模式

Elasticsearch PHP连接非安全集群

安全模式+HTTP协议

Elasticsearch PHP连接HTTP协议的安全集群

安全模式+HTTPS协议

Elasticsearch PHP连接HTTPS协议的安全集群(无证书)

安全模式+HTTPS协议

Elasticsearch PHP连接HTTPS协议的安全集群(加载证书)

Elasticsearch PHP连接非安全集群

使用Elasticsearch PHP客户端连接非安全模式的Elasticsearch集群,并获取集群健康状态。

使用集群连接信息创建客户端实例的代码示例如下:

<?php
require 'vendor/autoload.php';

use Elasticsearch\ClientBuilder;

class ElasticsearchClient
{
    private $client;

    public function __construct($config)
    {
        $this->client = ClientBuilder::create()
            ->setHosts($config['hosts'])
            ->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
            ->setRetries($config['retries'] ?? 3)
            ->setConnectionParams([
                'client' => [
                    'timeout' => 10,
                    'connect_timeout' => 5
                ]
            ])
            ->build();
    }

    public function getClusterHealth()
    {
        return $this->client->cluster()->health();
    }
}

$config = [
    'hosts' => [
        'http://IP:9200',
        'http://IP:9200'
    ],
    'retries' => 2
];

$es = new ElasticsearchClient($config);
print_r($es->getClusterHealth());
?>
表2 函数中的config配置说明

参数

描述

hosts

集群的访问地址,包含协议类型http、集群访问地址IP和集群连接端口9200,例如“http://xx.xx.xx.xx:9200”。当存在多个集群访问地址时,中间用“,”隔开。

retries

失败重试次数。使用SimpleConnectionPool作为连接池,增加访问连接失败重连的机制,避免出现访问连接异常的问题。

该程序为获取集群健康状态信息,如下所示,当正常返回查询结果时,表示集群连接成功。

1
2
3
4
5
6
Array
(
    [cluster_name] => css-xxxx-php
    [status] => green
    ...
)

Elasticsearch PHP连接HTTP协议的安全集群

使用Elasticsearch PHP客户端连接安全模式+HTTP协议的Elasticsearch集群,并获取集群健康状态。

使用集群连接信息创建客户端实例的代码示例如下:

<?php
require 'vendor/autoload.php';

use Elasticsearch\ClientBuilder;

class ElasticsearchClient
{
    private $client;

    public function __construct($config)
    {
        $this->client = ClientBuilder::create()
            ->setHosts($config['hosts'])
            ->setBasicAuthentication($config['username'], $config['password'])
            ->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
            ->setRetries($config['retries'] ?? 3)
            ->setConnectionParams([
                'client' => [
                    'timeout' => 10,
                    'connect_timeout' => 5
                ]
            ])
            ->build();
    }

    public function getClusterHealth()
    {
        return $this->client->cluster()->health();
    }
}

$config = [
    'hosts' => [
        'http://IP:9200',
        'http://IP:9200'
    ],
    'username' => 'USERNAME',
    'password' => 'PASSWORD',
    'retries' => 2
];

$es = new ElasticsearchClient($config);
print_r($es->getClusterHealth());
?>
表3 函数中的config配置说明

参数

描述

hosts

集群的访问地址,包含协议类型http、集群访问地址IP和集群连接端口9200,例如“http://xx.xx.xx.xx:9200”。当存在多个集群访问地址时,中间用“,”隔开。

username

访问集群的用户名。

password

用户名对应的密码。

retries

失败重试次数。使用SimpleConnectionPool作为连接池,增加访问连接失败重连的机制,避免出现访问连接异常的问题。

该程序为获取集群健康状态信息,如下所示,当正常返回查询结果时,表示集群连接成功。

1
2
3
4
5
6
Array
(
    [cluster_name] => css-xxxx-php
    [status] => green
    ...
)

Elasticsearch PHP连接HTTPS协议的安全集群(无证书)

在不加载安全证书的情况下,使用Elasticsearch PHP客户端连接安全模式+HTTPS协议的Elasticsearch集群,并获取集群健康状态。

使用集群连接信息创建客户端实例的代码示例如下:

<?php
require 'vendor/autoload.php';

use Elasticsearch\ClientBuilder;

class ElasticsearchClient
{
    private $client;

    public function __construct($config)
    {
        $this->client = ClientBuilder::create()
            ->setHosts($config['hosts'])
            ->setBasicAuthentication($config['username'], $config['password'])
            ->setSSLVerification($config['ssl_verify'] ?? false)
            ->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
            ->setRetries($config['retries'] ?? 3)
            ->setConnectionParams([
                'client' => [
                    'timeout' => 10,
                    'connect_timeout' => 5
                ]
            ])
            ->build();
    }

    public function getClusterHealth()
    {
        return $this->client->cluster()->health();
    }
}

$config = [
    'hosts' => [
        'https://IP:9200',
        'https://IP:9200'
    ],
    'username' => 'USERNAME',
    'password' => 'PASSWORD',
    'ssl_verify' => false,
    'retries' => 2
];

$es = new ElasticsearchClient($config);
print_r($es->getClusterHealth());
?>
表4 函数中的config配置说明

参数

描述

hosts

集群的访问地址,包含协议类型https、集群访问地址IP和集群连接端口9200,例如“https://xx.xx.xx.xx:9200”。当存在多个集群访问地址时,中间用“,”隔开。

username

访问集群的用户名。

password

用户名对应的密码。

ssl_verify

是否加载安全证书。

retries

失败重试次数。使用SimpleConnectionPool作为连接池,增加访问连接失败重连的机制,避免出现访问连接异常的问题。

该程序为获取集群健康状态信息,如下所示,当正常返回查询结果时,表示集群连接成功。

1
2
3
4
5
6
Array
(
    [cluster_name] => css-xxxx-php
    [status] => green
    ...
)

Elasticsearch PHP连接HTTPS协议的安全集群(加载证书)

在加载安全证书的情况下,使用Elasticsearch PHP客户端连接安全模式+HTTPS协议的Elasticsearch集群,并获取集群健康状态。

连接安全模式+HTTPS协议的Elasticsearch集群需要先提前准备好安全证书,操作指导请参见获取并上传安全证书

使用集群连接信息创建客户端实例的代码示例如下:

<?php
require 'vendor/autoload.php';

use Elasticsearch\ClientBuilder;

class ElasticsearchClient
{
    private $client;

    public function __construct($config)
    {
        $this->client = ClientBuilder::create()
            ->setHosts($config['hosts'])
            ->setBasicAuthentication($config['username'], $config['password'])
            ->setSSLVerification($config['ssl_verify'] ?? true)
            ->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
            ->setRetries($config['retries'] ?? 3)
            ->setConnectionParams([
                'client' => [
                    'timeout' => 10,
                    'connect_timeout' => 5
                ]
            ])
            ->build();
    }

    public function getClusterHealth()
    {
        return $this->client->cluster()->health();
    }
}

$config = [
    'hosts' => [
        'https://IP:9200',
        'https://IP:9200'
    ],
    'username' => 'USERNAME',
    'password' => 'PASSWORD',
    'ssl_verify' => true,
    'retries' => 2
];

$es = new ElasticsearchClient($config);
print_r($es->getClusterHealth());
?>
表5 函数中的config配置说明

参数

描述

hosts

集群的访问地址,包含协议类型https、集群访问地址IP和集群连接端口9200,例如“https://xx.xx.xx.xx:9200”。当存在多个集群访问地址时,中间用“,”隔开。

username

访问集群的用户名。

password

用户名对应的密码。

ssl_verify

是否加载安全证书。

retries

失败重试次数。使用SimpleConnectionPool作为连接池,增加访问连接失败重连的机制,避免出现访问连接异常的问题。

该程序为获取集群健康状态信息,如下所示,当正常返回查询结果时,表示集群连接成功。

1
2
3
4
5
6
Array
(
    [cluster_name] => css-xxxx-php
    [status] => green
    ...
)

获取并上传安全证书

当接入安全模式+HTTPS协议的Elasticsearch集群时,如需加载安全证书,则可以参考如下步骤获取安全证书,并上传至客户端。

  1. 获取安全证书(CloudSearchService.cer)。
    1. 登录云搜索服务管理控制台
    2. 在左侧导航栏,选择“集群管理 > Elasticsearch”
    3. 在集群列表,单击目标集群名称,进入集群详情页。
    4. 选择“概览”页签,在“网络信息”下方,单击“HTTPS访问”“下载证书”获取安全证书。
      图1 下载安全证书
  2. 将下载的安全证书上传到服务器上。
  3. 在服务器找到PHP环境目录,修改“php.ini”文件。
    curl.cainfo="/tmp/CloudSearchService"  // 替换为安全证书的绝对路径

相关文档