通过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集群时,示例代码会有差异,请根据实际业务场景选择参考文档。
|
Elasticsearch集群安全类型 |
参考文档 |
|---|---|
|
非安全模式 |
|
|
安全模式+HTTP协议 |
|
|
安全模式+HTTPS协议 |
|
|
安全模式+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());
?>
|
参数 |
描述 |
|---|---|
|
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());
?>
|
参数 |
描述 |
|---|---|
|
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());
?>
|
参数 |
描述 |
|---|---|
|
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());
?>
|
参数 |
描述 |
|---|---|
|
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集群时,如需加载安全证书,则可以参考如下步骤获取安全证书,并上传至客户端。
- 获取安全证书(CloudSearchService.cer)。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > Elasticsearch”。
- 在集群列表,单击目标集群名称,进入集群详情页。
- 选择“概览”页签,在“网络信息”下方,单击“HTTPS访问”的“下载证书”获取安全证书。
图1 下载安全证书
- 将下载的安全证书上传到服务器上。
- 在服务器找到PHP环境目录,修改“php.ini”文件。
curl.cainfo="/tmp/CloudSearchService" // 替换为安全证书的绝对路径