Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Laravel Elasticsearch: An Elasticsearch implementation of Laravel's Eloquent ORM

License

NotificationsYou must be signed in to change notification settings

pdphilip/laravel-elasticsearch

Repository files navigation

Laravel Elasticsearch

Latest Stable VersionGitHub Tests Action StatusGitHub Code Style Action StatusTotal Downloads

Laravel-Elasticsearch
An Elasticsearch implementation of Laravel's Eloquent ORM

The Power of Elasticsearch with Laravel's Eloquent

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();

Installation

Maintained versions (Elasticsearch 8.x):

Laravel 10.x, 11.x & 12.x (main):

composer require pdphilip/elasticsearch
Laravel VersionCommandMaintained
Laravel 10/11/12composer require pdphilip/elasticsearch:~5✅ Active
Laravel 10/11 (v4)composer require pdphilip/elasticsearch:~4🛠️ LTS
Laravel 9composer require pdphilip/elasticsearch:~3.9🛠️ LTS
Laravel 8composer require pdphilip/elasticsearch:~3.8🛠️ LTS

Unmaintained versions (Elasticsearch 8.x):

Laravel VersionCommandMaintained
Laravel 7.xcomposer require pdphilip/elasticsearch:~2.7❌ EOL
Laravel 6.x (5.8)composer require pdphilip/elasticsearch:~2.6❌ EOL

Unmaintained versions (Elasticsearch 7.x):

Laravel VersionCommandMaintained
Laravel 9.xcomposer require pdphilip/elasticsearch:~1.9❌ EOL
Laravel 8.xcomposer require pdphilip/elasticsearch:~1.8❌ EOL
Laravel 7.xcomposer require pdphilip/elasticsearch:~1.7❌ EOL
Laravel 6.x (5.8)composer require pdphilip/elasticsearch:~1.6❌ EOL

Configuration

  1. Set up your.env with 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=
  1. Inconfig/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),    ],],

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

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.


Documentation Links

Getting Started

Eloquent

Relationships

Migrations: Schema/Index

Misc

Credits

License

The MIT License (MIT). Please seeLicense File for more information.

Looking to use Elasticsearch for full-text search of your SQL models?

ElasticLens for Laravel

About

Laravel Elasticsearch: An Elasticsearch implementation of Laravel's Eloquent ORM

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors8

Languages


[8]ページ先頭

©2009-2025 Movatter.jp