laravel-elasticsearch icon indicating copy to clipboard operation
laravel-elasticsearch copied to clipboard

An Elasticsearch implementation of Laravel's Eloquent ORM

Laravel-Elasticsearch

Latest Stable Version Total Downloads

An Elasticsearch implementation of Laravel's Eloquent ORM

This package extends Laravel's Eloquent model and query builder with seamless integration of Elasticsearch functionalities. Designed to feel native to Laravel, this package enables you to work with Eloquent models while leveraging the powerful search and analytics capabilities of Elasticsearch.

$logs = UserLog::where('type', UserLogType::LOGIN)->where('created_at','>=',Carbon::now()->subDays(30))->get();

Read the Documentation


Installation

Maintained versions (Elasticsearch 8.x):

Please note: Only version 3 of the package will be maintained.

Laravel 11.x (main):

composer require pdphilip/elasticsearch
Laravel Version Command Maintained
Laravel 11.x composer require pdphilip/elasticsearch
Laravel 10.x composer require pdphilip/elasticsearch:~3.10
Laravel 9.x composer require pdphilip/elasticsearch:~3.9
Laravel 8.x composer require pdphilip/elasticsearch:~3.8

Unmaintained versions (Elasticsearch 8.x):

Laravel Version Command Maintained
Laravel 7.x composer require pdphilip/elasticsearch:~2.7
Laravel 6.x (5.8) composer require pdphilip/elasticsearch:~2.6

Unmaintained versions (Elasticsearch 7.x):

Laravel Version Command Maintained
Laravel 9.x composer require pdphilip/elasticsearch:~1.9
Laravel 8.x composer require pdphilip/elasticsearch:~1.8
Laravel 7.x composer require pdphilip/elasticsearch:~1.7
Laravel 6.x (5.8) composer require pdphilip/elasticsearch:~1.6

Configuration

  1. Set up your .env with the following Elasticsearch settings:
ES_AUTH_TYPE=http
ES_HOSTS="http://localhost:9200"
ES_USERNAME=
ES_PASSWORD=
ES_CLOUD_ID=
ES_API_ID=
ES_API_KEY=
ES_SSL_CERT=
ES_INDEX_PREFIX=my_app
# prefix will be added to all indexes created by the package with an underscore
# ex: my_app_user_logs for UserLog.php model

For multiple nodes, pass in as comma-separated:

ES_HOSTS="http://es01:9200,http://es02:9200,http://es03:9200"
Example cloud config .env: (Click to expand)
ES_AUTH_TYPE=cloud
ES_HOSTS="https://xxxxx-xxxxxx.es.europe-west1.gcp.cloud.es.io:9243"
ES_USERNAME=elastic
ES_PASSWORD=XXXXXXXXXXXXXXXXXXXX
ES_CLOUD_ID=XXXXX:ZXVyb3BlLXdl.........SQwYzM1YzU5ODI5MTE0NjQ3YmEyNDZlYWUzOGNkN2Q1Yg==
ES_API_ID=
ES_API_KEY=
ES_SSL_CERT=
  1. In config/database.php, add the elasticsearch connection:
'elasticsearch' => [
    'driver'       => 'elasticsearch',
    'auth_type'    => env('ES_AUTH_TYPE', 'http'), //http, cloud or api
    'hosts'        => explode(',', env('ES_HOSTS', 'http://localhost:9200')),
    'username'     => env('ES_USERNAME', ''),
    'password'     => env('ES_PASSWORD', ''),
    'cloud_id'     => env('ES_CLOUD_ID', ''),
    'api_id'       => env('ES_API_ID', ''),
    'api_key'      => env('ES_API_KEY', ''),
    'ssl_cert'     => env('ES_SSL_CERT', ''),
    'index_prefix' => env('ES_INDEX_PREFIX', false),
    'query_log'    => [
        'index'      => false, //Or provide a name for the logging index ex: 'laravel_query_logs'
        'error_only' => true, //If false, then all queries are logged if the query_log index is set
    ],
],

3. If packages are not autoloaded, add the service provider:

For Laravel 10 and below:

//config/app.php
'providers' => [
    ...
    ...
    PDPhilip\Elasticsearch\ElasticServiceProvider::class,
    ...

For Laravel 11:

//bootstrap/providers.php
<?php
return [
    App\Providers\AppServiceProvider::class,
    PDPhilip\Elasticsearch\ElasticServiceProvider::class,
];

Now, you're all set to use Elasticsearch with Laravel as if it were native to the framework.


Documentation Links

Getting Started

Eloquent

Relationships

Schema/Index


New in Version 3

Nested Queries (see)

This update introduces support for querying, sorting and filtering nested data

New Where clauses

  • Phrase Matching: The enhancement in phrase matching capabilities allows for refined search precision, facilitating the targeting of exact word sequences within textual fields, thus improving search specificity and relevance.
  • Exact Matching: Strengthening exact match queries enables more stringent search criteria, ensuring the retrieval of documents that precisely align with specified parameters.

Sorting Enhancements

Saving Updates

Grouped Queries

  • Grouped Queries: Queries can be grouped allowing multiple conditions to be nested within a single query block.