pdphilip / opensearch
Laravel Eloquent ORM 的 OpenSearch 实现
v2.0.3
2024-08-17 21:47 UTC
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
此包是在原始的 Elasticsearch 版本 的基础上构建的
此包的起点是从
v4.0.1
版本分叉,并经过了超过 2 年的开发
OpenSearch 是一个分布式、社区驱动的、Apache 2.0 许可的开源搜索和分析套件,适用于广泛的用例,如实时应用程序监控、日志分析和网站搜索。
Laravel Eloquent ORM 的 OpenSearch 实现
此包通过无缝集成 OpenSearch 功能扩展了 Laravel 的 Eloquent 模型和查询构建器。设计上感觉像是 Laravel 的原生功能,此包使您能够在利用 OpenSearch 强大的搜索和分析能力的同时使用 Eloquent 模型。
示例
$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();
阅读 文档
安装
Laravel 10 & 11 (主要)
composer require pdphilip/opensearch
配置
- 在
.env
中设置以下 OpenSearch 设置
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=
对于多个节点,使用逗号分隔
OS_HOSTS="http://opensearch-node1:9200,http://opensearch-node2:9200,http://opensearch-node3:9200"
- 在
config/database.php
中添加 opensearch 连接
'opensearch' => [ 'driver' => 'opensearch', 'hosts' => explode(',', env('OS_HOSTS', 'https://: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. 如果包没有被自动加载,添加服务提供者
对于 Laravel 10 及以下版本
//config/app.php 'providers' => [ ... ... PDPhilip\OpenSearch\OpenSearchServiceProvider::class, ...
对于 Laravel 11
//bootstrap/providers.php <?php return [ App\Providers\AppServiceProvider::class, PDPhilip\OpenSearch\OpenSearchServiceProvider::class, ];
现在,您就可以像使用框架原生功能一样使用 OpenSearch 与 Laravel 了。