elasticsearch / elasticsearch
Elasticsearch 的 PHP 客户端
Requires
- php: ^7.4 || ^8.0
- elastic/transport: ^8.10
- guzzlehttp/guzzle: ^7.0
- psr/http-client: ^1.0
- psr/http-message: ^1.1 || ^2.0
- psr/log: ^1|^2|^3
Requires (Dev)
- ext-yaml: *
- ext-zip: *
- mockery/mockery: ^1.5
- nyholm/psr7: ^1.5
- php-http/message-factory: ^1.0
- php-http/mock-client: ^1.5
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
- psr/http-factory: ^1.0
- symfony/finder: ~4.0
- symfony/http-client: ^5.0|^6.0|^7.0
- dev-main
- 8.x-dev
- 8.15.x-dev
- v8.15.0
- 8.14.x-dev
- v8.14.0
- 8.13.x-dev
- v8.13.0
- 8.12.x-dev
- v8.12.0
- 8.11.x-dev
- v8.11.0
- 8.10.x-dev
- v8.10.0
- 8.9.x-dev
- v8.9.0
- 8.8.x-dev
- v8.8.2
- v8.8.1
- v8.8.0
- 8.7.x-dev
- v8.7.1
- v8.7.0
- 8.6.x-dev
- v8.6.2
- v8.6.1
- v8.6.0
- 8.5.x-dev
- v8.5.3
- v8.5.2
- v8.5.1
- v8.5.0
- 8.4.x-dev
- v8.4.3
- v8.4.2
- v8.4.1
- v8.4.0
- 8.3.x-dev
- v8.3.3
- v8.3.2
- v8.3.1
- v8.3.0
- 8.2.x-dev
- v8.2.3
- v8.2.2
- v8.2.1
- v8.2.0
- 8.1.x-dev
- v8.1.0
- 8.0.x-dev
- v8.0.1
- v8.0.0
- v8.0.0-rc2
- v8.0.0-rc1
- v8.0.0-alpha
- 7.x-dev
- 7.17.x-dev
- v7.17.2
- v7.17.1
- v7.17.0
- 7.16.x-dev
- v7.16.0
- 7.15.x-dev
- v7.15.0
- 7.14.x-dev
- v7.14.0
- 7.13.x-dev
- v7.13.1
- v7.13.0
- 7.12.x-dev
- v7.12.0
- 7.11.x-dev
- v7.11.0
- 7.10.x-dev
- v7.10.0
- 7.9.x-dev
- v7.9.1
- v7.9.0
- 7.8.x-dev
- v7.8.0
- 7.7.x-dev
- v7.7.0
- v7.6.1
- v7.6.0
- v7.5.2
- v7.5.1
- v7.5.0
- 7.4.x-dev
- v7.4.2
- v7.4.1
- v7.4.0
- v7.3.0
- 7.2.x-dev
- v7.2.2
- v7.2.1
- v7.2.0
- v7.1.1
- v7.1.0
- 7.0.x-dev
- v7.0.2
- v7.0.1
- v7.0.0
- 6.x-dev
- 6.8.x-dev
- v6.8.3
- v6.8.2
- v6.8.1
- v6.8.0
- 6.7.x-dev
- v6.7.2
- v6.7.1
- v6.7.0
- 6.5.x-dev
- v6.5.1
- v6.5.0
- v6.1.0
- 6.0.x-dev
- v6.0.1
- v6.0.0
- v6.0.0-beta1
- 5.x-dev
- v5.5.0
- v5.4.0
- v5.3.2
- v5.3.1
- v5.3.0
- v5.2.0
- v5.1.3
- v5.1.2
- v5.1.1
- v5.1.0
- 5.0.x-dev
- v5.0.0
- 2.x-dev
- v2.4.0
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- 2.0.x-dev
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v2.0.0-beta5
- v2.0.0-beta4
- v2.0.0-beta3
- v2.0.0-beta2
- v2.0.0-beta1
- 1.x-dev
- v1.4.1
- v1.4.0
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.0
- 1.0.x-dev
- v1.0.2
- v1.0.1
- v1.0
- 0.4.x-dev
- v0.4.5
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- dev-renovate/configure
- dev-add-catalog-info
- dev-annieh/add_cluster_code_examples_to_docs
- dev-new-yaml-tests
- dev-bump_8.10_to_8.10.1
- dev-bump_main_to_8.11.0
- dev-bump_main_to_8.8.0
- dev-bump_main_to_8.7.0
- dev-bump_main_to_8.6.0
- dev-dra/assemble-with-workflow
- dev-add/bump
- dev-fix/1242
- dev-fix/getenv
- dev-toby-sutor-patch-1
- dev-feature/master/dockerized-build
- dev-fix/7.4.2
- dev-exchange-build-status-widgets-7x
This package is auto-updated.
Last update: 2024-09-17 14:11:35 UTC
README
Elasticsearch PHP 客户端
这是 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,可以查看参考。
感谢您的贡献! ❤️