Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Elastic Client Laravel Package

babenkoivan/elastic-client

View on GitHub
Deep Wiki
Context7

Elastic Client

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


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')
        ]);
    }
}
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums