The official PHP Elasticsearch client integrated with Laravel

Fund package maintenance!

Installs: 1 897 902

Dependents: 6

Suggesters: 0

Security: 0

Stars: 45

Watchers: 3

Forks: 9

Open Issues: 0

v2.1.0 2023-03-04 08:16 UTC

This package is auto-updated.

Last update: 2024-04-13 08:44:36 UTC


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

Support the project!

The official PHP Elasticsearch client integrated with Laravel.



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

  • PHP 7.4-8.x
  • Elasticsearch 8.x
  • Laravel 6.x-10.x


The library can be installed via Composer:

composer require babenkoivan/elastic-client


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' => [
            // 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:

// see Elastic\Client\ClientBuilder for the reference
class MyClientBuilder implements Elastic\Client\ClientBuilderInterface
    public function default(): Client
        // should return a client instance for the default connection 
    public function connection(string $name): Client
        // 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);


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

namespace App\Console\Commands;

use Elastic\Elasticsearch\Client;
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');
            'index' => $this->argument('name')