macellan/elasticsearch

Elasticsearch 的 PHP 客户端


README

Elasticsearch 的官方低级客户端。它的目标是提供一个通用的平台,用于所有与 Elasticsearch 相关的 PHP 代码;因此,它尝试保持无偏见并且非常易于扩展。

为了在整个低级客户端(Ruby、Python 等)之间保持一致性,客户端接受简单的关联数组作为参数。所有参数,从 URI 到文档体,都在关联数组中定义。

特性

  • 与 REST API 和其他语言客户端一对一映射
  • 可配置的、自动发现集群节点
  • 持久、Keep-Alive 连接(在脚本的生命周期内)
  • 所有可用节点的负载均衡(具有可插拔的选择策略)。默认为轮询
  • 可插拔连接池,提供不同的连接策略
  • 通用、可插拔的架构 - 大多数组件可以替换为您的自定义类,如果需要特殊行为的话

版本矩阵

由于 Elasticsearch 1.0(以及 2.0 发布时)存在破坏性更改,您需要将 Elasticsearch 的版本与库的适当版本相匹配。

  • 如果您正在使用 Elasticsearch 1.0+,您必须安装 1.0 Elasticsearch-PHP 分支。
  • 如果您正在使用低于 1.0 的版本,您必须安装 0.4 Elasticsearch-PHP 分支。由于 ES 0.90.x 及以下版本现已停止支持,相应的 0.4 分支将不再接收任何开发或错误修复。请升级。
  • 您永远不应该使用 Elasticsearch-PHP Master 分支,因为它跟踪 Elasticsearch master,可能包含不完整的功能或向后兼容性的中断。只有当您出于某种原因针对 Elasticsearch master 进行开发时,才应使用 ES-PHP master。

v2.0 测试版

您知道现在有一个全新的 Elasticsearch-PHP 测试版吗?如果您目前正在使用 ES-PHP,您应该试用它并 发送反馈!如果您是 Elasticsearch-PHP 的新手,您应该从 v2.0 开始您的项目,因为代码库正在向这个方向发展。

v2.0 特性

  • 基于 RingPHP 的新 HTTP 核心,它是 Guzzle5 的内部 HTTP 核心
  • 由于 RingPHP,我们现在可以公开可选的异步模式(基于未来),这允许并行执行 curl 请求,从而实现更高的吞吐量
  • 更少的依赖项,使分布更小,冲突更少
  • 简化架构,使整个代码库更小,更易于插拔,开销更小

在此处查看文档破坏性更改在此处

今天就在您的项目中试用它!

{
    "require": {
       "elasticsearch/elasticsearch": "~2.0@beta"
   }
}

文档

完整文档可以在此处找到。 文档存储在仓库中的 /docs/ 目录下,因此如果您发现错别字或问题,请提交 PR 修复它!

通过 Composer 安装

安装 Elasticsearch-PHP 的推荐方法是通过 Composer

  1. 下载并安装Composer,用于Linux/Unix/OSX请访问此处,用于Windows请访问此处

  2. 安装最新稳定版本

        php composer.phar require elasticsearch/elasticsearch
  3. 需要Composer的自动加载器

    Composer还准备了一个自动加载文件,可以自动加载它下载的任何库中的所有类。要使用它,只需将以下行添加到您的代码的引导过程中

        <?php
        require 'vendor/autoload.php';
    
        $client = new Elasticsearch\Client();

有关如何安装Composer、配置自动加载以及其他定义依赖项的最佳实践,请访问getcomposer.org

您会注意到安装命令指定了--no-dev。这阻止Composer安装各种测试和开发依赖项。对于普通用户来说,没有必要安装测试套件(它还包括Elasticsearch的完整源代码)。如果您想为开发做出贡献,只需省略--no-dev标志,以便能够运行测试。

PHP版本要求

此库支持的最低PHP版本是5.3.9。关于为什么是这个版本的解释,请参阅最低PHP版本要求文档

索引文档

在elasticsearch-php中,几乎所有配置都是通过关联数组完成的。REST端点、文档和可选参数——所有这些都是关联数组。

要索引文档,我们只需指定一个包含要索引的文档的body。文档中的每个字段都由关联数组中的不同键/值对表示。

索引、类型和ID也指定在参数关联数组中

    $params = array();
    $params['body']  = array('testField' => 'abc');
    $params['index'] = 'my_index';
    $params['type']  = 'my_type';
    $params['id']    = 'my_id';
    $ret = $client->index($params);

获取文档

让我们获取我们刚才索引的文档

    $getParams = array();
    $getParams['index'] = 'my_index';
    $getParams['type']  = 'my_type';
    $getParams['id']    = 'my_id';
    $retDoc = $client->get($getParams);

搜索文档

搜索是Elasticsearch的标志(毫不奇怪!),让我们进行一次基本搜索。我们将使用Match查询进行演示

    $searchParams['index'] = 'my_index';
    $searchParams['type']  = 'my_type';
    $searchParams['body']['query']['match']['testField'] = 'abc';
    $queryResponse = $client->search($searchParams);

    echo $queryResponse['hits']['hits'][0]['_id']; // Outputs 'abc'

更新文档

让我们更新我们已索引的文档

    $updateParams['index']          = 'my_index';
    $updateParams['type']           = 'my_type';
    $updateParams['id']             = 'my_id';
    $updateParams['body']['doc']    = array('my_key' => 'new_value');

    $retUpdate = $client->update($updateParams);

删除文档

好的,让我们删除之前添加的文档

    $deleteParams = array();
    $deleteParams['index'] = 'my_index';
    $deleteParams['type'] = 'my_type';
    $deleteParams['id'] = 'my_id';
    $retDelete = $client->delete($deleteParams);

删除索引

由于Elasticsearch的动态特性,我们最初添加的第一个文档自动构建了一个带有一些默认设置的索引。让我们删除该索引,因为我们想在以后指定自己的设置

    $deleteParams['index'] = 'my_index';
    $client->indices()->delete($deleteParams);

创建索引

好的,现在我们从头开始,让我们添加一个新的索引并设置一些自定义设置

    $indexParams['index'] = 'my_index';
    $indexParams['body']['settings']['number_of_shards'] = 2;
    $indexParams['body']['settings']['number_of_replicas'] = 0;
    $client->indices()->create($indexParams);

总结

这只是对客户端及其语法的快速概述。如果您熟悉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许可证第2.0版(“许可证”);除非遵守许可证,否则不得使用此文件。您可以在以下地址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件是以“现状”为基础分发的,不提供任何形式的保证或条件,无论是明示的还是隐含的。有关许可证的权限和限制的具体语言,请参阅许可证。

LGPL v2.1 声明

版权所有 (C) 2013-2014 Elasticsearch

本库是自由软件;您可以根据自由软件基金会发布的GNU较小通用公共许可证的条款重新分发和/或修改它;许可证的第2.1版,或者(根据您的选择)许可证的任何后续版本。

本库的目的是希望它是有用的,但没有任何保证;甚至没有关于适销性或特定用途适用性的隐含保证。有关更多详情,请参阅GNU较小通用公共许可证。

您应该已随本库收到GNU较小通用公共许可证的副本;如果没有,请写信给自由软件基金会,Inc.,51 Franklin Street,第五层,波士顿,MA 02110-1301 USA。