pdphilip/opensearch

Laravel Eloquent ORM 的 OpenSearch 实现

v2.0.3 2024-08-17 21:47 UTC

This package is auto-updated.

Last update: 2024-09-17 22:16:41 UTC


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

配置

  1. .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"
  1. 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 了。

文档链接

入门

Eloquent

关系

模式/索引