Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/babenkoivan/elastic-client
The official PHP Elasticsearch client integrated with Laravel
https://github.com/babenkoivan/elastic-client
client elasticsearch laravel php
Last synced: 1 day ago
JSON representation
The official PHP Elasticsearch client integrated with Laravel
- Host: GitHub
- URL: https://github.com/babenkoivan/elastic-client
- Owner: babenkoivan
- License: mit
- Created: 2019-10-27T10:32:34.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-06-18T06:54:56.000Z (5 months ago)
- Last Synced: 2024-10-28T16:13:13.857Z (17 days ago)
- Topics: client, elasticsearch, laravel, php
- Language: PHP
- Homepage:
- Size: 55.7 KB
- Stars: 47
- Watchers: 3
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Elastic Client
[![Latest Stable Version](https://poser.pugx.org/babenkoivan/elastic-client/v/stable)](https://packagist.org/packages/babenkoivan/elastic-client)
[![Total Downloads](https://poser.pugx.org/babenkoivan/elastic-client/downloads)](https://packagist.org/packages/babenkoivan/elastic-client)
[![License](https://poser.pugx.org/babenkoivan/elastic-client/license)](https://packagist.org/packages/babenkoivan/elastic-client)
[![Tests](https://github.com/babenkoivan/elastic-client/workflows/Tests/badge.svg)](https://github.com/babenkoivan/elastic-client/actions?query=workflow%3ATests)
[![Code style](https://github.com/babenkoivan/elastic-client/workflows/Code%20style/badge.svg)](https://github.com/babenkoivan/elastic-client/actions?query=workflow%3A%22Code+style%22)
[![Static analysis](https://github.com/babenkoivan/elastic-client/workflows/Static%20analysis/badge.svg)](https://github.com/babenkoivan/elastic-client/actions?query=workflow%3A%22Static+analysis%22)
[![Donate PayPal](https://img.shields.io/badge/donate-paypal-blue)](https://paypal.me/babenkoi)---
The official PHP Elasticsearch client integrated with Laravel.
## Contents
* [Compatibility](#compatibility)
* [Installation](#installation)
* [Configuration](#configuration)
* [Usage](#usage)## Compatibility
The current version of Elastic Client has been tested with the following configuration:
* PHP 8.2
* Elasticsearch 8.x
* Laravel 11.xIf your project uses older Laravel (or PHP) version check [the previous major version](https://github.com/babenkoivan/elastic-client/tree/v2.1.0#compatibility) of the package.
## Installation
The library can be installed via Composer:
```bash
composer require babenkoivan/elastic-client
```## Configuration
To change the client settings you need to publish the configuration file first:
```bash
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](https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/node_pool.html#config-hash).```php
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:
```php
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:
```php
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:
```php
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')
]);
}
}
```