elasticsearch/elasticsearch

Elasticsearch 的 PHP 客户端

安装次数: 134,837,952

依赖项: 1,020

建议器: 133

安全: 0

星标: 5,264

关注者: 462

分支: 965

公开问题: 28

v8.15.0 2024-08-14 14:32 UTC

This package is auto-updated.

Last update: 2024-09-17 14:11:35 UTC


README

Elastic logo

Elasticsearch PHP 客户端

Build status Latest Stable Version Total Downloads

这是 Elasticsearch 的官方 PHP 客户端。

下载最新版本的 Elasticsearch注册 免费试用 Elastic Cloud

内容

安装

请参考入门文档中的 安装部分

连接

请参考入门文档中的 连接部分

使用

elasticsearch-php 客户端提供了超过 400 个端点来与 Elasticsearch 交互。所有这些端点的列表可以在 Elasticsearch API 的 官方文档 中找到。

以下是您可以使用客户端执行的基本操作:索引、搜索和删除。

版本控制

此客户端与 Elasticsearch 服务器版本同步发布。

为了确保兼容性,请在相应企业搜索实现的主版本中使用此库的最新版本。

例如,对于 Elasticsearch 7.16,使用此库的 7.16 版本或更高版本,但不能使用 8.0

兼容性

Elasticsearch 客户端与当前维护的 PHP 版本兼容。

语言客户端是向前兼容的;这意味着客户端支持与 Elasticsearch 更高或相同的次版本通信而不破坏。这并不意味着客户端会自动支持较新 Elasticsearch 版本的新功能;只有在发布新的客户端版本后才能实现。例如,8.12 版本的客户端不会自动支持 Elasticsearch 8.13 版本的新功能,需要 8.13 版本的客户端才能实现。Elasticsearch 语言客户端仅向后兼容默认发行版,且没有做出任何保证。

不兼容的更改 💥

elasticsearch-php 的 8.0.0 版本与 7.x 版本相比有新的实现。它支持 PSR-7 用于 HTTP 消息和 PSR-18 用于 HTTP 客户端通信。

我们尽量减少了与 7.x 的 BC 断裂,但有一些(大的)差异

  • 我们更改了命名空间,现在所有内容都在 Elastic\Elasticsearch
  • 我们使用了elastic-transport-php库进行HTTP通信;
  • 我们更改了Exception模型,使用命名空间Elastic\Elasticsearch\Exception。所有异常都继承自ElasticsearchException接口,类似于7.x版本;
  • 我们更改了每个端点的响应类型,使用Elasticsearch响应类。这个类封装了一个PSR-7响应,允许将响应体作为数组或对象访问。这意味着您可以像7.x版本一样访问API响应,这里没有破坏向下兼容性!👼
  • 我们在NodePool中更改了ConnectionPool。由于这些对象是节点(主机),所以connection命名是不明确的;

您可以通过查看BREAKING_CHANGES文件获取更多信息。

模拟 Elasticsearch 客户端

如果您需要模拟Elasticsearch客户端,只需模拟一个PSR-18 HTTP客户端。

例如,您可以使用php-http/mock-client如下所示

use Elastic\Elasticsearch\ClientBuilder;
use Elastic\Elasticsearch\Response\Elasticsearch;
use Http\Mock\Client;
use Nyholm\Psr7\Response;

$mock = new Client(); // This is the mock client

$client = ClientBuilder::create()
    ->setHttpClient($mock)
    ->build();

// This is a PSR-7 response
$response = new Response(
    200, 
    [Elasticsearch::HEADER_CHECK => Elasticsearch::PRODUCT_NAME],
    'This is the body!'
);
$mock->addResponse($response);

$result = $client->info(); // Just calling an Elasticsearch endpoint

echo $result->asString(); // This is the body!

我们使用ClientBuilder::setHttpClient()设置模拟客户端。您可以使用addResponse($response)函数指定您想要的响应。如您所见,$response是一个PSR-7响应对象。在这个示例中,我们使用了来自nyholm/psr7项目的Nyholm\Psr7\Response对象。如果您使用PHPUnit,甚至可以模拟ResponseInterface如下

$response = $this->createMock('Psr\Http\Message\ResponseInterface');

注意:我们在HTTP响应中添加了一个特殊的头部。这是产品检查头部,它对于保证elasticsearch-php正在与8.0+版本的Elasticsearch服务器通信是必需的。

有关更多信息,您可以阅读PHP-HTTP文档中的Mock客户端部分。

常见问题解答 🔮

我在哪里报告客户端的问题?

如果某些功能不符合预期,请打开一个问题

我还可以去哪里寻求帮助?

您可以在Elastic社区论坛上查看。

贡献 🚀

我们欢迎对项目做出贡献的贡献者。在您开始之前,以下是一些有用的信息...

  • 如果您想为这个项目做出贡献,您需要订阅贡献者协议
  • 在提交拉取请求之前,请创建一个问题以讨论您提案的范围。
  • 如果您想为版本8.0发送PR,请使用8.0分支,对于8.1使用8.1分支,依此类推。
  • 除非您想为客户端的开发版本做出贡献(master代表下一个主要版本),否则请不要向master发送PR。
  • 每个PR都应该包含一个使用PHPUnit编写的单元测试。如果您不熟悉PHPUnit,可以查看参考

感谢您的贡献! ❤️

许可证 📗

MIT © Elastic