pdphilip/opensearch

An OpenSearch implementation of Laravel's Eloquent ORM

v2.0.1 2024-06-06 13:16 UTC

This package is auto-updated.

Last update: 2024-06-06 13:18:12 UTC


README

68747470733a2f2f63646e2e736e6970666f726d2e696f2f70647068696c69702f6f70656e7365617263682f6c61726176656c5f6f70656e7365617263682e706e67

Laravel-OpenSearch

This package has been built off the back of the original Elasticsearch version of this package

The starting point of this package was forked from v4.0.1 with over 2 years of development

OpenSearch is a distributed, community-driven, Apache 2.0-licensed, 100% open-source search and analytics suite used for a broad set of use cases like real-time application monitoring, log analytics, and website search.

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.

Example:

$logs = UserLog::where('created_at','>=',Carbon::now()->subDays(30))->get();
$updates = UserLog::where('status', 1)->update(['status' => 4]);
$profiles = UserProfile::whereIn('country_code',['US','CA'])->orderByDesc('last_login')->take(10)->get();
$deleted = UserProfile::where('state','unsubscribed')->where('updated_at','<=',Carbon::now()->subDays(90)->delete();
$search = UserProfile::term('loves espressos')->minShouldMatch(2)->highlight()->search();

Read the Documentation

Installation

Laravel 10 & 11 (main):

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

  1. Set up your .env with the following OpenSearch settings:
OS_HOSTS="http://opensearch:9200"
OS_USERNAME=
OS_PASSWORD=
OS_INDEX_PREFIX=my_app

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.

Documentation Links

Getting Started

Eloquent

Relationships

Schema/Index