pdphilip / opensearch
An OpenSearch implementation of Laravel's Eloquent ORM
Installs: 23 975
Dependents: 0
Suggesters: 0
Security: 0
Stars: 23
Watchers: 1
Forks: 2
Open Issues: 1
Requires
- php: ^8.1
- illuminate/container: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/events: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- opensearch-project/opensearch-php: ^2.2
Requires (Dev)
- doctrine/coding-standard: 12.0.x-dev
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.3
README
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.
Examples:
$logs = UserLog::where('created_at','>=',Carbon::now()->subDays(30))->get();
$updates = UserLog::where('status', 1)->update(['status' => 4]);
$updates = UserLog::where('status', 1)->paginate(50);
$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::phrase('loves espressos')->highlight()->search();
Read the Documentation
Installation
Laravel 10 & 11 (main):
composer require pdphilip/opensearch
Configuration
- 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= 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"
- 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.
Documentation Links
Getting Started
Eloquent
- The Base Model
- Querying Models
- Saving Models
- Deleting Models
- Ordering and Pagination
- Distinct and GroupBy
- Aggregations
- Chunking
- Nested Queries
- OpenSearch Specific Queries
- Full-Text Search
- Dynamic Indices