Laravel-OpenSearch
An OpenSearch implementation of Laravel's Eloquent ORM
This package extends Laravel's Eloquent model and query builder with seamless integration of OpenSearch 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 OpenSearch.
Looking to use the Elasticsearch version of this package? Github
Installation
Maintained versions (OpenSearch 2.x):
Please note: Only version 3 of the package will be maintained.
Laravel 10 & 11 - main branch (tag 2.x
):
composer require pdphilip/opensearch
Laravel Version | Command | Maintained |
---|---|---|
Laravel 10 & 11 | composer require pdphilip/opensearch:~2 | ✅ |
Laravel 8 & 9 | composer require pdphilip/opensearch:~1 | ✅ |
Configuration
- Set up your
.env
with the following OpenSearch settings:
OS_HOSTS="http://opensearch:9200"
OS_USERNAME=
OS_PASSWORD=
OS_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
OS_SIG_V4_PROVIDER=
OS_SIG_V4_REGION=
OS_SIG_V4_SERVICE=
OS_SSL_CERT=
OS_SSL_CERT_PASSWORD=
OS_SSL_KEY=
OS_SSL_KEY_PASSWORD=
OS_OPT_VERIFY_SSL=true
OS_OPT_RETRIES=
OS_OPT_SNIFF_ON_START=
OS_OPT_PORT_HOST_HEADERS=
OS_ERROR_INDEX=
For multiple nodes, pass in as comma-separated:
OS_HOSTS="http://opensearch-node1:9200,http://opensearch-node2:9200,http://opensearch-node3:9200"
For AWS, you may need to pass in the port 443 in your host url,
Ex: https://xxxxxxxxxxxx.amazonaws.com:443
- In
config/database.php
, add the opensearch connection:
'opensearch' => [
'driver' => 'opensearch',
'hosts' => explode(',', env('OS_HOSTS', 'http://localhost:9200')),
'basic_auth' => [
'username' => env('OS_USERNAME', ''),
'password' => env('OS_PASSWORD', ''),
],
'sig_v4' => [
'provider' => env('OS_SIG_V4_PROVIDER'),
'region' => env('OS_SIG_V4_REGION'),
'service' => env('OS_SIG_V4_SERVICE'),
],
'ssl' => [
'cert' => env('OS_SSL_CERT', ''),
'cert_password' => env('OS_SSL_CERT_PASSWORD', ''),
'key' => env('OS_SSL_KEY', ''),
'key_password' => env('OS_SSL_KEY_PASSWORD', ''),
],
'index_prefix' => env('OS_INDEX_PREFIX', false),
'options' => [
'ssl_verification' => env('OS_OPT_VERIFY_SSL', true),
'retires' => env('OS_OPT_RETRIES'),
'sniff_on_start' => env('OS_OPT_SNIFF_ON_START'),
'port_in_host_header' => env('OS_OPT_PORT_HOST_HEADERS'),
],
'error_log_index' => env('OS_ERROR_INDEX', false),
],
3. If packages are not autoloaded, add the service provider:
For Laravel 10 and below:
//config/app.php
'providers' => [
...
...
PDPhilip\OpenSearch\OpenSearchServiceProvider::class,
...
For Laravel 11:
//bootstrap/providers.php
<?php
return [
App\Providers\AppServiceProvider::class,
PDPhilip\OpenSearch\OpenSearchServiceProvider::class,
];
Now, you're all set to use OpenSearch with Laravel as if it were native to the framework.
Essentials
The Base Model
Discover how to seamlessly integrate your Laravel models with OpenSearch by extending the base model, creating a fluid experience that feels right at home in any Laravel application
Querying Models
Learn the intricacies of the query model within the OpenSearch ecosystem, including how to perform sophisticated searches, apply filters, and implement pagination for efficient data retrieval
Saving Models
Master the process of creating and updating models in OpenSearch, ensuring data integrity and leveraging Laravel's ORM for smooth and efficient database operations
Deleting Models
Understand the mechanics of deleting models in OpenSearch, including the nuances of soft deletes and the performance-oriented 'Delete without refresh' feature.