pdphilip/opensearch 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

pdphilip/opensearch

最新稳定版本:v3.0.3

Composer 安装命令:

composer require pdphilip/opensearch

包简介

An OpenSearch implementation of Laravel's Eloquent ORM

README 文档

README

Laravel-OpenSearch

Latest Stable Version GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

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

The Power of OpenSearch with Laravel's Eloquent

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.

The Eloquent you already know:

UserLog::where('created_at','>=',Carbon::now()->subDays(30))->get();
UserLog::create([
    'user_id' => '2936adb0-b10d-11ed-8e03-0b234bda3e12',
    'ip' => '62.182.98.146',
    'location' => [40.7185,-74.0025],
    'country_code' => 'US',
    'status' => 1,
]);
UserLog::where('status', 1)->update(['status' => 4]);
UserLog::where('status', 4)->orderByDesc('created_at')->paginate(50);
UserProfile::whereIn('country_code',['US','CA'])
    ->orderByDesc('last_login')->take(10)->get();
UserProfile::where('state','unsubscribed')
    ->where('updated_at','<=',Carbon::now()->subDays(90))->delete();

opensearch with Eloquent:

UserProfile::searchTerm('Laravel')->orSearchTerm('opensearch')->get();
UserProfile::searchPhrasePrefix('loves espressos and t')->highlight()->get();
UserProfile::whereMatch('bio', 'PHP')->get();
UserLog::whereGeoDistance('location', '10km', [40.7185,-74.0025])->get();
UserProfile::whereFuzzy('description', 'qick brwn fx')->get();

Built in Relationships (even to SQL models):

UserLog::where('status', 1)->orderByDesc('created_at')->with('user')->get();

Read the Documentation

Installation

Laravel 10.x, 11.x & 12.x (main):

composer require pdphilip/opensearch
Laravel Version Command Maintained
Laravel 10/11/12 composer require pdphilip/opensearch:~3
Laravel 10/11 (v2) composer require pdphilip/opensearch:~2 ❌ EOL
Laravel 8 & 9 composer require pdphilip/opensearch:~1 ❌ EOL

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
    
# AWS SigV4 Config:
OS_SIG_V4_PROVIDER=
OS_SIG_V4_REGION=
OS_SIG_V4_SERVICE=

# Cert Config:
OS_SSL_CERT=
OS_SSL_CERT_PASSWORD=
OS_SSL_KEY=
OS_SSL_KEY_PASSWORD=

# Optional Settings:
OS_OPT_VERIFY_SSL=true
OS_OPT_RETRIES=
OS_OPT_SNIFF_ON_START=
OS_OPT_PORT_HOST_HEADERS=
OS_OPT_ID_SORTABLE=false
OS_OPT_META_HEADERS=true
OS_OPT_BYPASS_MAP_VALIDATION=false
OS_OPT_DEFAULT_LIMIT=1000

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 OpensSearch 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'      => [
        'bypass_map_validation' => env('OS_OPT_BYPASS_MAP_VALIDATION', false),
        'ssl_verification'      => env('OS_OPT_VERIFY_SSL', true),
        'retires'               => env('OS_OPT_RETRIES',null),
        'sniff_on_start'        => env('OS_OPT_SNIFF_ON_START',false),
        'logging'               => env('OS_OPT_LOGGING', false),
        'port_in_host_header'   => env('OS_OPT_PORT_HOST_HEADERS',false),
        'default_limit'         => env('OS_OPT_DEFAULT_LIMIT', 1000),
        'allow_id_sort'         => env('OS_OPT_ID_SORTABLE', 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

Relationships

Migrations: Schema/Index

Misc

Credits

License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 230.91k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 49
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 49
  • Watchers: 1
  • Forks: 5
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-04-28