pdphilip/elasticsearch

Laravel Eloquent ORM 的 Elasticsearch 实现

v4.3.0 2024-09-23 12:36 UTC

README

Laravel-Elasticsearch

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

Laravel-Elasticsearch: Laravel Eloquent ORM 的 Elasticsearch 实现

此包扩展了 Laravel 的 Eloquent 模型和查询构建器,无缝集成 Elasticsearch 功能。设计上感觉像是 Laravel 的原生功能,此包使您能够在使用 Eloquent 模型的同时利用 Elasticsearch 强大的搜索和分析功能。

示例

$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();

阅读文档

使用OpenSearch? Github

包测试

安装

维护版本 (Elasticsearch 8.x)

Laravel 10.x & 11.x (主要)

composer require pdphilip/elasticsearch

未维护版本 (Elasticsearch 8.x)

未维护版本 (Elasticsearch 7.x)

配置

  1. 使用以下 Elasticsearch 设置设置 .env
ES_AUTH_TYPE=http
ES_HOSTS="https://:9200"
ES_USERNAME=
ES_PASSWORD=
ES_CLOUD_ID=
ES_API_ID=
ES_API_KEY=
ES_SSL_CA=
ES_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
ES_SSL_CERT=
ES_SSL_CERT_PASSWORD=
ES_SSL_KEY=
ES_SSL_KEY_PASSWORD=
# Options
ES_OPT_ID_SORTABLE=false
ES_OPT_VERIFY_SSL=true
ES_OPT_RETRIES=
ES_OPT_META_HEADERS=true
ES_ERROR_INDEX=

对于多个节点,以逗号分隔传入

ES_HOSTS="http://es01:9200,http://es02:9200,http://es03:9200"
示例云配置 .env: (点击展开)
ES_AUTH_TYPE=cloud
ES_HOSTS="https://xxxxx-xxxxxx.es.europe-west1.gcp.cloud.es.io:9243"
ES_USERNAME=elastic
ES_PASSWORD=XXXXXXXXXXXXXXXXXXXX
ES_CLOUD_ID=XXXXX:ZXVyb3BlLXdl.........SQwYzM1YzU5ODI5MTE0NjQ3YmEyNDZlYWUzOGNkN2Q1Yg==
ES_API_ID=
ES_API_KEY=
ES_SSL_CA=
ES_INDEX_PREFIX=my_app
ES_ERROR_INDEX=
  1. config/database.php 中添加 Elasticsearch 连接
'elasticsearch' => [
    'driver'       => 'elasticsearch',
    'auth_type'    => env('ES_AUTH_TYPE', 'http'), //http or cloud
    'hosts'        => explode(',', env('ES_HOSTS', 'https://:9200')),
    'username'     => env('ES_USERNAME', ''),
    'password'     => env('ES_PASSWORD', ''),
    'cloud_id'     => env('ES_CLOUD_ID', ''),
    'api_id'       => env('ES_API_ID', ''),
    'api_key'      => env('ES_API_KEY', ''),
    'ssl_cert'     => env('ES_SSL_CA', ''),
    'ssl'          => [
        'cert'          => env('ES_SSL_CERT', ''),
        'cert_password' => env('ES_SSL_CERT_PASSWORD', ''),
        'key'           => env('ES_SSL_KEY', ''),
        'key_password'  => env('ES_SSL_KEY_PASSWORD', ''),
    ],
    'index_prefix' => env('ES_INDEX_PREFIX', false),
    'options'      => [
        'allow_id_sort'    => env('ES_OPT_ID_SORTABLE', false),
        'ssl_verification' => env('ES_OPT_VERIFY_SSL', true),
        'retires'          => env('ES_OPT_RETRIES', null),
        'meta_header'      => env('ES_OPT_META_HEADERS', true),
    ],
    'error_log_index' => env('ES_ERROR_INDEX', false), //If set will log ES errors to this index, ex: 'laravel_es_errors'
],

3. 如果包未自动加载,请添加服务提供程序

对于 Laravel 11

//bootstrap/providers.php
<?php
return [
    App\Providers\AppServiceProvider::class,
    PDPhilip\Elasticsearch\ElasticServiceProvider::class,
];

对于 Laravel 10 及以下版本

//config/app.php
'providers' => [
    ...
    ...
    PDPhilip\Elasticsearch\ElasticServiceProvider::class,
    ...

现在,您已经准备好使用 Laravel 作为框架的本地功能来使用 Elasticsearch。

文档链接

入门

Eloquent

关系

模式/索引

杂项

版本 4 中的新功能

(以及 3.9.1/3.8.1)

版本 3 中的新功能

嵌套查询 (查看)

新的 Where 子句

  • 短语匹配: 词语匹配能力的增强提高了搜索精度,有助于在文本字段中定位精确的单词序列,从而提高搜索的特异性和相关性。
  • 精确匹配: 加强精确匹配查询能够确保检索到与指定参数完全一致的文档。

排序增强

保存更新

分组查询

  • 分组查询:可以将查询分组,允许在单个查询块内嵌套多个条件。