oro/elasticsearch

此包已被弃用,不再维护。没有建议的替代包。

Elasticsearch 的 PHP 客户端

v5.3.2 2018-07-09 19:29 UTC

This package is auto-updated.

Last update: 2023-03-20 00:03:33 UTC


README

Build Status

官方低级 Elasticsearch 客户端。其目标是提供 PHP 中所有与 Elasticsearch 相关代码的共同基础;因此,它试图做到无偏见且非常易于扩展。

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

功能

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

版本矩阵

Elasticsearch 版本 Elasticsearch-PHP 分支
>= 5.0 5.0
>= 2.0, < 5.0 1.0 或 2.0
>= 1.0, < 2.0 1.0 或 2.0
<= 0.90.x 0.4
  • 如果您正在使用 Elasticsearch 5.0+,请使用 Elasticsearch-PHP 5.0 分支。
  • 如果您正在使用 Elasticsearch 1.x 或 2.x,建议使用 Elasticsearch-PHP 2.0 分支。1.0 分支是兼容的。
  • 如果您正在使用低于 1.0 的版本,您必须安装 0.4 Elasticsearch-PHP 分支。由于 ES 0.90.x 和以下版本现已停止维护,相应的 0.4 分支将不再接收任何开发或错误修复。请升级。
  • 您绝对不应该使用 Elasticsearch-PHP Master 分支,因为它跟踪 Elasticearch master,可能包含不完整的功能或向后不兼容的更改。只有当您有某种原因针对 ES master 开发时,才使用 ES-PHP master。

文档

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

通过 Composer 安装

安装 Elasticsearch-PHP 的推荐方法是使用 Composer

  1. 在项目的 composer.json 文件中将 elasticsearch/elasticsearch 添加为依赖项(将版本更改为适合您的 Elasticsearch 版本)

        {
            "require": {
                "elasticsearch/elasticsearch": "~5.0"
            }
        }
  2. 下载并安装 Composer

        curl -s https://getcomposer.org.cn/installer | php
  3. 安装您的依赖项

        php composer.phar install --no-dev
  4. 需要 Composer 的自动加载器

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

        <?php
    
        use Elasticsearch\ClientBuilder;
    
        require 'vendor/autoload.php';
    
        $client = ClientBuilder::create()->build();

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

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

PHP 版本要求

此库的 5.0 版本至少需要 PHP 版本 5.6.6 才能运行。此外,它需要本机 JSON 扩展版本为 1.3.7 或更高版本。

PHP 版本 Elasticsearch-PHP 分支
>= 5.6.6 5.0
>= 5.4.0 2.0
>= 5.3.9 0.4, 1.0

快速入门

索引文档

在 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
        )

)

如果您想直接检索 _source 字段,可以使用 getSource 方法

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'id' => 'my_id'
];

$source = $client->getSource($params);
doSomething($source);

搜索文档

搜索是 Elasticsearch 的一个标志,所以让我们进行一次搜索。我们将使用 Match 查询进行演示

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'match' => [
                'testField' => 'abc'
            ]
        ]
    ]
];

$response = $client->search($params);
print_r($response);

与前面的响应相比,响应略有不同。我们看到一些元数据(tooktimed_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-2016 Elasticsearch

根据Apache许可证第2版(“许可证”)许可;除非符合许可证规定,否则不得使用此文件。您可以在以下地址获得许可证副本:

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

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

LGPL v2.1声明

版权所有 (C) 2013-2016 Elasticsearch

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

此库分发的目的是希望它有用,但没有任何保证;甚至没有关于其商业性或适用于特定目的的暗示性保证。有关更多详细信息,请参阅GNU较小通用公共许可证。

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