pdphilip/elasticsearch
最新稳定版本:v5.2.0
Composer 安装命令:
composer require pdphilip/elasticsearch
包简介
An Elasticsearch implementation of Laravel's Eloquent ORM
README 文档
README
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 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();
Read the Documentation
Installation
Maintained versions (Elasticsearch 8.x):
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 |
Unmaintained versions (Elasticsearch 8.x):
| 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 |
Unmaintained versions (Elasticsearch 7.x):
| 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 |
Configuration
- Set up your
.envwith 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"
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_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), ], ],
3. If packages are not autoloaded, add the service provider:
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.
Documentation Links
Getting Started
Eloquent
- 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
Relationships
Migrations: Schema/Index
Misc
Credits
License
The MIT License (MIT). Please see License File for more information.
Looking to use Elasticsearch for full-text search of your SQL models?
统计信息
- 总下载量: 264.58k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 142
- 点击次数: 1
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-02-22