Stars: 5186
Forks: 980
Pull Requests: 620
Issues: 734
Watchers: 454
Last Updated: 2023-09-14 21:34:55
Official PHP client for Elasticsearch.
License: MIT License
Languages: PHP, Shell, Dockerfile, Twig
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html
This is the official PHP client for Elasticsearch.
Refer to the Installation section of the getting started documentation.
## Connecting
Refer to the Connecting section of the getting started documentation.
The elasticsearch-php
client offers 400+ endpoints for interacting with
Elasticsearch. A list of all these endpoints is available in the
official documentation
of Elasticsearch APIs.
Here we reported the basic operation that you can perform with the client: index, search and delete.
This client is versioned and released alongside Elasticsearch server.
To guarantee compatibility, use the most recent version of this library within the major version of the corresponding Enterprise Search implementation.
For example, for Elasticsearch 7.16
, use 7.16
of this library or above, but
not 8.0
.
The 8.0.0 version of elasticsearch-php
contains a new implementation compared
with 7.x. It supports PSR-7 for HTTP
messages and PSR-18 for HTTP client
communications.
We tried to reduce the BC breaks as much as possible with 7.x
but there are
some (big) differences:
Elastic\Elasticsearch
Exception
model, using the namespace
Elastic\Elasticsearch\Exception
. All the exceptions extends the
ElasticsearchException
interface, as in 7.xConnectionPool
in NodePool
. The connection
naming was
ambigous since the objects are nodes (hosts)You can have a look at the BREAKING_CHANGES file for more information.
If you need to mock the Elasticsearch client you just need to mock a PSR-18 HTTP Client.
For instance, you can use the php-http/mock-client as follows:
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!
We are using the ClientBuilder::setHttpClient()
to set the mock client.
You can specify the response that you want to have using the
addResponse($response)
function. As you can see the $response
is a PSR-7
response object. In this example we used the Nyholm\Psr7\Response
object from
the nyholm/psr7 project. If you are using
PHPUnit you can even mock the ResponseInterface
as
follows:
$response = $this->createMock('Psr\Http\Message\ResponseInterface');
Notice: we added a special header in the HTTP response. This is the product
check header, and it is required for guarantee that elasticsearch-php
is
communicating with an Elasticsearch server 8.0+.
For more information you can read the Mock client section of PHP-HTTP documentation.
If something is not working as expected, please open an issue.
You can checkout the Elastic community discuss forums.
We welcome contributors to the project. Before you begin, some useful info...
8.0
please use the 8.0
branch, for
8.1
use the 8.1
branch and so on.master
unless you want to contribute to the development
version of the client (master
represents the next major version).Thanks in advance for your contribution! ❤️