- Notifications
You must be signed in to change notification settings - Fork26
Laravel Elasticsearch: An Elasticsearch implementation of Laravel's Eloquent ORM
License
pdphilip/laravel-elasticsearch
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
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 thepowerful 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();
Read theDocumentation
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 |
- Set up your
.envwith the following Elasticsearch settings:
ES_AUTH_TYPE=httpES_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 modelES_SSL_CERT=ES_SSL_CERT_PASSWORD=ES_SSL_KEY=ES_SSL_KEY_PASSWORD=# OptionsES_OPT_ID_SORTABLE=falseES_OPT_VERIFY_SSL=trueES_OPT_RETRIES=ES_OPT_META_HEADERS=trueES_ERROR_INDEX=ES_OPT_BYPASS_MAP_VALIDATION=falseES_OPT_DEFAULT_LIMIT=1000
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=cloudES_HOSTS="https://xxxxx-xxxxxx.es.europe-west1.gcp.cloud.es.io:9243"ES_USERNAME=elasticES_PASSWORD=XXXXXXXXXXXXXXXXXXXXES_CLOUD_ID=XXXXX:ZXVyb3BlLXdl.........SQwYzM1YzU5ODI5MTE0NjQ3YmEyNDZlYWUzOGNkN2Q1Yg==ES_API_ID=ES_API_KEY=ES_SSL_CA=ES_INDEX_PREFIX=my_app_ES_ERROR_INDEX=
- In
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), ],],
ForLaravel 11 +:
//bootstrap/providers.php<?phpreturn [App\Providers\AppServiceProvider::class,PDPhilip\Elasticsearch\ElasticServiceProvider::class,];
ForLaravel 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 Base Model
- Saving Models
- Deleting Models
- Querying Models
- Eloquent Queries
- ES Eloquent Queries
- Cross Fields Search Queries
- Aggregation Queries
- Distinct and GroupBy Queries
- Nested Queries
- Ordering and Pagination
- Chunking
- Dynamic Indices
The MIT License (MIT). Please seeLicense File for more information.
About
Laravel Elasticsearch: An Elasticsearch implementation of Laravel's Eloquent ORM
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors8
Uh oh!
There was an error while loading.Please reload this page.
