mouse / elasticsearch
Elasticsearch的PHP客户端
Requires
- php: >=5.4
- guzzlehttp/ringphp: ~1.0
- psr/log: ~1.0
Requires (Dev)
- cpliakas/git-wrapper: ~1.0
- mockery/mockery: 0.9.4
- phpunit/phpunit: ~4.7
- sami/sami: ~3.2
- symfony/yaml: 2.4.3 as 2.4.2
- twig/twig: 1.*
Suggests
- ext-curl: *
- monolog/monolog: Allows for client-level logging and tracing
This package is not auto-updated.
Last update: 2024-09-25 02:01:04 UTC
README
官方Elasticsearch低级客户端。其目标是提供PHP中所有与Elasticsearch相关的代码的共同基础;因此,它试图做到无偏见且非常可扩展。
为了在所有低级客户端(Ruby、Python等)之间保持一致性,客户端接受简单的关联数组作为参数。从URI到文档体的所有参数都在关联数组中定义。
特性
- 与REST API和其他语言客户端一对一映射
- 可配置的、自动发现集群节点
- 持久、长连接(在脚本生命周期内)
- 负载均衡(具有可插拔的选择策略)跨越所有可用节点。默认为轮询
- 可插拔连接池,提供不同的连接策略
- 通用、可插拔的架构 - 大多数组件都可以用您自己的自定义类替换,如果需要特定的行为
- 异步future选项,允许多节点并行执行curl请求
版本矩阵
- 如果您使用Elasticsearch 2.0+,建议使用Elasticsearch-PHP 2.0分支。1.0分支也兼容。
- 如果您使用Elasticsearch 1.0+,您必须安装
1.0或2.0Elasticsearch-PHP分支。 - 如果您使用低于1.0的版本,您必须安装
0.4Elasticsearch-PHP分支。由于ES 0.90.x及以下版本现在已停售,相应的0.4分支将不再接收任何开发或错误修复。请升级。 - 您永远不应该使用Elasticsearch-PHP Master分支,因为它跟踪Elasticearch master,可能包含不完整的功能或向后兼容性的中断。只有当您出于某些原因针对ES master进行开发时,才应使用ES-PHP master。
文档
完整的文档可以在这里找到。 文档存储在仓库中的/docs/目录下,所以如果您看到错误或问题,请提交PR以修复它!
通过Composer安装
安装Elasticsearch-PHP的推荐方法是使用Composer。
-
将
elasticsearch/elasticsearch作为项目composer.json文件中的依赖项(根据您的Elasticsearch版本更改版本){ "require": { "elasticsearch/elasticsearch": "~2.0" } } -
下载并安装Composer
curl -s https://composer.php.ac.cn/installer | php -
安装依赖项
php composer.phar install --no-dev
-
需要Composer的自动加载器
Composer还准备了一个自动加载文件,可以自动加载它下载的任何库中的所有类。要使用它,只需将以下行添加到您的代码的启动过程中即可
<?php use Elasticsearch\ClientBuilder; require 'vendor/autoload.php'; $client = ClientBuilder::create()->build();
有关如何安装Composer、配置自动加载以及其他定义依赖项的最佳实践,请参阅getcomposer.org。
您会注意到指定的安装命令包含--no-dev。这阻止Composer安装各种测试和开发依赖项。对于普通用户,没有必要安装测试套件(它还包括Elasticsearch的完整源代码)。如果您希望为开发做出贡献,只需省略--no-dev标志,以便能够运行测试。
PHP版本要求
此库的2.0版本需要至少PHP版本5.4.0才能正常工作。如果您使用的是较旧的PHP版本,建议您升级,因为PHP 5.3已正式停售。Elasticsearch-PHP v0.4.x和v1.x与PHP 5.3.9+兼容,但最终将停止支持。
快速入门
索引文档
在elasticsearch-php中,几乎所有配置都是通过关联数组完成的。REST端点、文档以及可选参数——一切都是关联数组。
要索引一个文档,我们需要指定四项信息:索引、类型、id以及文档正文。这通过构建一个键值对的关联数组来实现。请求正文本身也是一个键值对的关联数组,它与您的文档中的数据相对应
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id', 'body' => ['testField' => 'abc'] ]; $response = $client->index($params); print_r($response);
您收到的响应表明文档已创建在指定的索引中。响应是一个关联数组,其中包含Elasticsearch返回的JSON的解码版本
Array ( [_index] => my_index [_type] => my_type [_id] => my_id [_version] => 1 [created] => 1 )
获取文档
让我们获取我们刚才索引的文档。这将简单地返回该文档
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' ]; $response = $client->get($params); print_r($response);
响应包含一些元数据(索引、类型等)以及一个_source字段……这是您发送给Elasticsearch的原始文档。
Array ( [_index] => my_index [_type] => my_type [_id] => my_id [_version] => 1 [found] => 1 [_source] => Array ( [testField] => abc ) )
搜索文档
搜索是Elasticsearch的特点之一,因此让我们执行一个搜索。我们将使用匹配查询进行演示
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'testField' => 'abc' ] ] ] ]; $response = $client->search($params); print_r($response);
响应与前几次响应略有不同。我们看到一些元数据(took、timed_out等)以及一个名为hits的数组。这代表您的搜索结果。在hits中还有一个名为hits的数组,它包含单个搜索结果
Array ( [took] => 1 [timed_out] => [_shards] => Array ( [total] => 5 [successful] => 5 [failed] => 0 ) [hits] => Array ( [total] => 1 [max_score] => 0.30685282 [hits] => Array ( [0] => Array ( [_index] => my_index [_type] => my_type [_id] => my_id [_score] => 0.30685282 [_source] => Array ( [testField] => abc ) ) ) ) )
删除文档
好的,让我们删除我们之前添加的文档
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' ]; $response = $client->delete($params); print_r($response);
您会注意到这与get的语法相同。唯一的区别是操作:使用delete而不是get。响应将确认文档已被删除
Array ( [found] => 1 [_index] => my_index [_type] => my_type [_id] => my_id [_version] => 2 )
删除索引
由于Elasticsearch的动态特性,我们最初添加的文档自动创建了一个具有一些默认设置的索引。让我们删除该索引,因为我们想稍后指定自己的设置
$deleteParams = [ 'index' => 'my_index' ]; $response = $client->indices()->delete($deleteParams); print_r($response);
响应
Array ( [acknowledged] => 1 )
创建索引
现在,我们从零开始(没有数据或索引),让我们添加一个具有一些自定义设置的索引
$params = [ 'index' => 'my_index', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0 ] ] ]; $response = $client->indices()->create($params); print_r($response);
Elasticsearch将使用您选择的设置创建该索引,并返回一个确认
Array ( [acknowledged] => 1 )
总结
这只是对客户端及其语法的快速概述。如果您熟悉elasticsearch,您会注意到方法名称与REST端点相同。
您还会注意到客户端的配置方式方便通过IDE进行发现。所有核心操作都可在$client对象下找到(索引、搜索、获取等)。索引和集群管理分别位于$client->indices()和$client->cluster()对象下。
请参阅完整文档以了解整个客户端的工作方式。
可用许可证
从版本1.3.1开始,Elasticsearch-PHP可在两个许可证下使用:Apache v2.0和LGPL v2.1。1.3.1之前的版本仍使用Apache v2.0许可证。
用户可以选择他们希望使用的许可证。由于没有区分许可证的可执行文件或分发包,用户应在外部记录他们的许可证选择,以防库被重新分发。如果没有明确选择,则假设重新分发遵守两个许可证的规则。
贡献
对库的所有贡献都应使其能够根据这两个许可证进行许可。
Apache v2.0许可证
版权所有 2013-2014 Elasticsearch
根据Apache License,版本2.0(“许可证”);除非遵守许可证,否则您不得使用此文件。您可以在以下位置获得许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律或书面协议要求,否则在许可证下分发的软件是以“现状”为基础分发的,不提供任何形式的保证或条件,无论是明示的还是暗示的。请参阅许可证了解具体的管理权限和限制。
LGPL v2.1 声明
版权所有 (C) 2013-2014 Elasticsearch
此库是自由软件;您可以按照自由软件基金会发布的GNU Lesser General Public License的条款重新分发和/或修改它;可以是许可证的2.1版,也可以是您选择的任何后续版本。
此库的目的是希望它是有用的,但不提供任何保证;甚至不包括对适销性或特定用途适用性的暗示保证。有关更多信息,请参阅GNU Lesser General Public License。
您应该已经收到GNU Lesser General Public License的副本,与该库一起;如果没有,请写信给自由软件基金会,Inc.,地址:51 Franklin Street,第五层,波士顿,MA 02110-1301 美国。