这是 Elasticsearch 官方的 PHP 客户端。我们把 Elasticsearch-PHP 设计成低级客户端,使用时不会偏离 REST API 的用法。
客户端所有方法几乎都与 REST API 对应,而且也与其他编程语言的客户端(如 ruby, python 等)方法结构相似。我们希望这种对应方式可以方便开发者更加容易上手客户端,且以最小的代价快速从一种编程语言转换到另一种编程语言。
本客户端设计得很"灵活"。虽然有一些通用的细节添加进了客户端(集群状态嗅探,轮询调度请求等),但总的来说它是十分基础的。这也是有意这样设计。我们只是设计了基础方法,更多的复杂类库可以在此衍生出来。
Elasticsearch-php 的安装需要满足以下 4 个需求:
其余的依赖会由 Composer 自动安装。Composer 是一个 PHP 包管理和依赖管理工具,使用 Composer 安装 elasticsearch-php 非常简单。
PHP要访问Elasticsearch,必须安装curl扩展。
phpinfo();如果你的PHP环境出现上图curl扩展,就表示你的PHP可以访问Elasticsearch。如果没有出现,请按以下步骤安装。
直接从php源码包中,使用root权限安装。
找到原先安装PHP的源码包文件,如果已经删掉,就需要重新下载原来版本的源码包并解压。
[root@zw2 /root]#cd /usr/local/src/php-7.4.2/ext/curl
实际是要追加PHP编译时的项目,要重新生成一个"configure"文件,通过"phpize"文件来生成"configure"文件。
查找一下可执行文件"phpize"位置在哪。
[root@zw2 /usr/local/src/php-7.4.2/ext/curl]#find / -name phpize
红框位置圈的就是我们要找的文件"phpize"的位置。
在当前目录"/usr/local/src/php-7.4.2/ext/curl"下执行以下命令。
[root@zw2 /usr/local/src/php-7.4.2/ext/curl]#/usr/local/php/bin/phpize
经过以上命令,就在当前目录下生成了文件"configure"。
用文件"php-config"追加PHP的配置配置,php-config一般和phpize在同级目录。
[root@zw2 /usr/local/src/php-7.4.2/ext/curl]#./configure --with-php-config=/usr/local/php/bin/php-config
编译、安装
[root@zw2 /usr/local/src/php-7.4.2/ext/curl]#make
[root@zw2 /usr/local/src/php-7.4.2/ext/curl]#make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20190902
上面提示我们要的扩展文件"curl.so"已经生成在目录/usr/local/php/lib/php/extensions/no-debug-zts-20190902/
[root@zw2 /usr/local/src/php-7.4.2/ext/curl]#cd /usr/local/php/lib/php/extensions/no-debug-zts-20190902
[root@zw2 /usr/local/php/lib/php/extensions/no-debug-zts-20190902]#ls
将扩展文件"curl.so"加入到php.ini文件中。
重启PHP,查看phpinfo()。
这样PHP就可以访问Elasticsearch了.
假设我们的例子在目录"/zwweb/temp1.12cc.com"下进行。
1.在 composer.json 文件中增加 elasticsearch-php。如果你是新建项目,那么把以下的代码复制粘贴到 composer.json 就行了。如果是在现有项目中添加 elasticsearch-php,那么把 elasticsearch-php 添加到其它的包名后面即可:
{
"require": {
"elasticsearch/elasticsearch": "~7.0"
}
}
2.使用 composer 安装客户端:首先要用下面第一个命令来安装 composer.phar ,然后使用第二个命令来执行安装程序。composer 会自动下载所有的依赖,把下载的依赖存储在当前目录 vendor/ 目录下,并且创建一个 autoloader:
[root@zw2 /zwweb/temp1.12cc.com]#curl -s http://getcomposer.org/installer | php
由于网站http://getcomposer.org/installer访问不稳定,期间可能会失败,多试几次就可以了。
成功后,就会生成文件"composer.phar"。
[root@zw2 /zwweb/temp1.12cc.com]#php composer.phar install --no-dev
关于 Composer 的详情请查看Composer 中文网。
3.最后在测试文件es.php里加载 autoload.php。如果你现有项目是用 Composer 安装的,那么 autoload.php 也许已经在某处加载了,你就不必再加载。最后实例化一个客户端对象:
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$hosts = ['s1.12cc.com:9200','s3.12cc.com:9200'];
$client = ClientBuilder::create()->setHosts($hosts)->build();
$params = [
'index' => 'jl',
'type' => 'test',
'id' => 1
];
$response = $client->get($params);
print_r($response);
客户端对象的实例化主要是使用静态方法 create() ,这里会创建一个 ClientBuilder 对象,主要是用来设置一些自定义配置。如果你配置完了,你就可以调用 build() 方法来创建一个 Client 对象。我们会在配置一节中详细说明配置方法。
你会注意到安装命令行指定了 --no-dev 。这里是防止 Composer 安装各种测试依赖包和开发依赖包。对于普通用户没有必要安装测试包。特别是开发依赖包包含了 Elasticsearch 的一套源码,这是为了以 REST API 的方式进行测试。然而这对于非开发者来说太大了,因此要使用 --no-dev。
如果你想帮助完善这个客户端类库,那就删掉 --no-dev 标志来进行测试吧。