babenkoivan/elastic-client

The official PHP Elasticsearch client integrated with Laravel

Maintainers

👁 babenkoivan

Package info

github.com/babenkoivan/elastic-client

pkg:composer/babenkoivan/elastic-client

Fund package maintenance!

Ko-Fi

Paypal

Statistics

Installs: 4 349 898

Dependents: 7

Suggesters: 0

Stars: 54

Open Issues: 0

v4.0.1 2025-11-16 12:13 UTC

Requires

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 362649a61082ad973d37fa729e5273fa3e32ef12

  • Ivan Babenko <babenko.i.a.woop@gmail.com>

phpclientelasticsearchlaravelelastic

This package is auto-updated.

Last update: 2026-06-16 13:41:20 UTC


README

👁 Latest Stable Version
👁 Total Downloads
👁 License
👁 Tests
👁 Code style
👁 Static analysis
👁 Donate PayPal

👁 Support the project!

The official PHP Elasticsearch client integrated with Laravel.

Contents

Compatibility

The current version of Elastic Client has been tested with the following configuration:

  • PHP 8.2
  • Elasticsearch 9.x
  • Laravel 12.x

If your project uses older Elasticsearch, Laravel, or PHP version check the previous major version of the package.

Installation

The library can be installed via Composer:

composer require babenkoivan/elastic-client

Configuration

To change the client settings you need to publish the configuration file first:

php artisan vendor:publish --provider="Elastic\Client\ServiceProvider"

In the newly created config/elastic.client.php file you can define the default connection name and describe multiple connections using configuration hashes. You can read more about building the client from a configuration hash here.

return [
 'default' => env('ELASTIC_CONNECTION', 'default'),
 'connections' => [
 'default' => [
 'hosts' => [
 env('ELASTIC_HOST', 'localhost:9200'),
 ],
 // configure basic authentication
 'basicAuthentication' => [
 env('ELASTIC_USERNAME'),
 env('ELASTIC_PASSWORD'),
 ],
 // configure HTTP client (Guzzle by default)
 'httpClientOptions' => [
 'timeout' => 2,
 ],
 ],
 ],
];

If you need more control over the client creation, you can create your own client builder:

use Elastic\Elasticsearch\ClientInterface;
use Elastic\Client\ClientBuilderInterface;

class MyClientBuilder implements ClientBuilderInterface
{
 public function default(): ClientInterface
 {
 // should return a client instance for the default connection 
 }
 
 public function connection(string $name): ClientInterface
 {
 // should return a client instance for the connection with the given name 
 }
}

Do not forget to register the builder in your application service provider:

class MyAppServiceProvider extends Illuminate\Support\ServiceProvider
{
 public function register()
 {
 $this->app->singleton(ClientBuilderInterface::class, MyClientBuilder::class);
 }
}

Usage

Use Elastic\Client\ClientBuilderInterface to get access to the client instance:

namespace App\Console\Commands;

use Elastic\Elasticsearch\ClientInterface;
use Elastic\Client\ClientBuilderInterface;
use Illuminate\Console\Command;

class CreateIndex extends Command
{
 protected $signature = 'create:index {name}';

 protected $description = 'Creates an index';

 public function handle(ClientBuilderInterface $clientBuilder)
 {
 // get a client for the default connection
 $client = $clientBuilder->default();
 // get a client for the connection with name "write"
 $client = $clientBuilder->connection('write');
 
 $client->indices()->create([
 'index' => $this->argument('name')
 ]);
 }
}