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.

Star

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 VersionCommandMaintained
Laravel 10 & 11composer require pdphilip/opensearch:~2
Laravel 8 & 9composer require pdphilip/opensearch:~1

Configuration

  1. 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=

For multiple nodes, pass in as comma-separated:

OS_HOSTS="http://opensearch-node1:9200,http://opensearch-node2:9200,http://opensearch-node3:9200"
  1. 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'),
    ],
    'query_log'    => [
        'index'      => false, //Or provide a name for the logging index ex: 'laravel_query_logs'
        'error_only' => true, //If false, then all queries are logged if the query_log index is set
    ],
],

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.


Was this page helpful?