Package Data | |
---|---|
Maintainer Username: | pdphilip |
Maintainer Contact: | pd.philip@gmail.com (David Philip) |
Package Create Date: | 2022-02-22 |
Package Last Update: | 2025-06-04 |
Home Page: | https://elasticsearch.pdphilip.com/ |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2025-06-18 15:00:04 |
Package Statistics | |
---|---|
Total Downloads: | 110,220 |
Monthly Downloads: | 24,803 |
Daily Downloads: | 887 |
Total Stars: | 131 |
Total Watchers: | 5 |
Total Forks: | 22 |
Total Open Issues: | 0 |
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.
The Eloquent you already know:
UserLog::where('created_at','>=',Carbon::now()->subDays(30))->get();
UserLog::create([
'user_id' => '2936adb0-b10d-11ed-8e03-0b234bda3e12',
'ip' => '62.182.98.146',
'location' => [40.7185,-74.0025],
'country_code' => 'US',
'status' => 1,
]);
UserLog::where('status', 1)->update(['status' => 4]);
UserLog::where('status', 4)->orderByDesc('created_at')->paginate(50);
UserProfile::whereIn('country_code',['US','CA'])
->orderByDesc('last_login')->take(10)->get();
UserProfile::where('state','unsubscribed')
->where('updated_at','<=',Carbon::now()->subDays(90))->delete();
Elasticsearch with Eloquent:
UserProfile::searchTerm('Laravel')->orSearchTerm('Elasticsearch')->get();
UserProfile::searchPhrasePrefix('loves espressos and t')->highlight()->get();
UserProfile::whereMatch('bio', 'PHP')->get();
UserLog::whereGeoDistance('location', '10km', [40.7185,-74.0025])->get();
UserProfile::whereFuzzy('description', 'qick brwn fx')->get();
Built in Relationships (even to SQL models):
UserLog::where('status', 1)->orderByDesc('created_at')->with('user')->get();
Laravel 10.x, 11.x & 12.x (main):
composer require pdphilip/elasticsearch
| Laravel Version | Command | Maintained |
|--------------------|------------------------------------------------|------------|
| Laravel 10/11/12 | composer require pdphilip/elasticsearch:~5
| ✅ Active |
| Laravel 10/11 (v4) | composer require pdphilip/elasticsearch:~4
| 🛠️ LTS |
| Laravel 9 | composer require pdphilip/elasticsearch:~3.9
| 🛠️ LTS |
| Laravel 8 | composer require pdphilip/elasticsearch:~3.8
| 🛠️ LTS |
| Laravel Version | Command | Maintained |
|-------------------|------------------------------------------------|------------|
| Laravel 7.x | composer require pdphilip/elasticsearch:~2.7
| ❌ EOL |
| Laravel 6.x (5.8) | composer require pdphilip/elasticsearch:~2.6
| ❌ EOL |
| Laravel Version | Command | Maintained |
|-------------------|------------------------------------------------|------------|
| Laravel 9.x | composer require pdphilip/elasticsearch:~1.9
| ❌ EOL |
| Laravel 8.x | composer require pdphilip/elasticsearch:~1.8
| ❌ EOL |
| Laravel 7.x | composer require pdphilip/elasticsearch:~1.7
| ❌ EOL |
| Laravel 6.x (5.8) | composer require pdphilip/elasticsearch:~1.6
| ❌ EOL |
.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_CA=
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 model
ES_SSL_CERT=
ES_SSL_CERT_PASSWORD=
ES_SSL_KEY=
ES_SSL_KEY_PASSWORD=
# Options
ES_OPT_ID_SORTABLE=false
ES_OPT_VERIFY_SSL=true
ES_OPT_RETRIES=
ES_OPT_META_HEADERS=true
ES_ERROR_INDEX=
ES_OPT_BYPASS_MAP_VALIDATION=false
ES_OPT_DEFAULT_LIMIT=1000
For multiple nodes, pass in as comma-separated:
ES_HOSTS="http://es01:9200,http://es02:9200,http://es03:9200"
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_CA=
ES_INDEX_PREFIX=my_app_
ES_ERROR_INDEX=
config/database.php
, add the elasticsearch connection:'elasticsearch' => [
'driver' => 'elasticsearch',
'auth_type' => env('ES_AUTH_TYPE', 'http'), //http or cloud
'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_CA', ''),
'ssl' => [
'cert' => env('ES_SSL_CERT', ''),
'cert_password' => env('ES_SSL_CERT_PASSWORD', ''),
'key' => env('ES_SSL_KEY', ''),
'key_password' => env('ES_SSL_KEY_PASSWORD', ''),
],
'index_prefix' => env('ES_INDEX_PREFIX', false),
'options' => [
'bypass_map_validation' => env('ES_OPT_BYPASS_MAP_VALIDATION', false),
'logging' => env('ES_OPT_LOGGING', false),
'ssl_verification' => env('ES_OPT_VERIFY_SSL', true),
'retires' => env('ES_OPT_RETRIES', null),
'meta_header' => env('ES_OPT_META_HEADERS', true),
'default_limit' => env('ES_OPT_DEFAULT_LIMIT', 1000),
'allow_id_sort' => env('ES_OPT_ID_SORTABLE', false),
],
],
For Laravel 11 +:
//bootstrap/providers.php
<?php
return [
App\Providers\AppServiceProvider::class,
PDPhilip\Elasticsearch\ElasticServiceProvider::class,
];
For Laravel 10 and below:
//config/app.php
'providers' => [
...
...
PDPhilip\Elasticsearch\ElasticServiceProvider::class,
...
Now, you're all set to use Elasticsearch with Laravel as if it were native to the framework.
The MIT License (MIT). Please see License File for more information.