mhd-neuroflash/laravel-elasticsearch-updated

此包已被废弃,不再维护。未建议替代包。

在Laravel应用程序中轻松使用官方PHP ElasticSearch客户端。

dev-master 2022-11-04 13:08 UTC

This package is auto-updated.

Last update: 2022-11-04 13:10:59 UTC


README

在Laravel或Lumen应用程序中使用官方Elastic Search客户端的简单方法。

⚠️ 此包将被废弃

由于几个因素,包括我不再使用ES,我将停止对此包的开发。如果您有兴趣接管此项目,请在此处的问题板上联系我。

Build Status Total Downloads Latest Stable Version Latest Stable Version License

安装和配置

通过Composer安装cviebrock/laravel-elasticsearch包的当前版本

composer require cviebrock/laravel-elasticsearch

如果您使用ElasticSearch版本5,则安装此包的2版本

composer require cviebrock/laravel-elasticsearch:^2

Laravel

包的服务提供程序将自动注册其服务提供程序。

发布配置文件

php artisan vendor:publish --provider="Cviebrock\LaravelElasticsearch\ServiceProvider"
通过.env文件进行替代配置方法

按照上述建议发布配置文件后,您可以通过将以下内容添加到应用程序的.env文件(使用适当的值)来配置ElasticSearch

ELASTICSEARCH_HOST=localhost
ELASTICSEARCH_PORT=9200
ELASTICSEARCH_SCHEME=http
ELASTICSEARCH_USER=
ELASTICSEARCH_PASS=
连接到AWS Elasticsearch服务

如果您正在连接到Amazon AWS上的ElasticSearch实例,则需要执行以下操作:composer require aws/aws-sdk-php:^3.80 并将以下内容添加到您的.env文件中

AWS_ELASTICSEARCH_ENABLED=true
AWS_REGION=...
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...

如果您必须使用具有自定义凭证的另一种身份验证方法(例如,instanceProfile()),则必须发布配置文件并使用 aws_credentials

<?php
// config/elasticsearch.php

$provider = \Aws\Credentials\CredentialProvider::instanceProfile();
$memoizedProvider = \Aws\Credentials\CredentialProvider::memoize($provider);
$credentials = $memoizedProvider()->wait();

...

'hosts' => [
    [
        'host'            => env('ELASTICSEARCH_HOST', 'localhost'),
        // For local development, the default Elasticsearch port is 9200.
        // If you are connecting to an Elasticsearch instance on AWS, you probably want to set this to null
        'port'            => env('ELASTICSEARCH_PORT', 9200),
        'scheme'          => env('ELASTICSEARCH_SCHEME', null),
        'user'            => env('ELASTICSEARCH_USER', null),
        'pass'            => env('ELASTICSEARCH_PASS', null),

        // If you are connecting to an Elasticsearch instance on AWS, you will need these values as well
        'aws'             => env('AWS_ELASTICSEARCH_ENABLED', false),
        'aws_region'      => env('AWS_REGION', ''),
        'aws_key'         => env('AWS_ACCESS_KEY_ID', ''),
        'aws_secret'      => env('AWS_SECRET_ACCESS_KEY', '')
        'aws_credentials' => $credentials
    ],
],

如果您有一个在supervisor中运行的任务,则必须使用Closure。这样,凭证将在运行时更新。

<?php
// config/elasticsearch.php

$provider = \Aws\Credentials\CredentialProvider::instanceProfile();
$memoizedProvider = \Aws\Credentials\CredentialProvider::memoize($provider);

...

'hosts' => [
    [
        ...
        'aws_credentials' => $memoizedProvider
    ],
],

如果您使用 php artisan config:cache,则不能在配置文件中使用Closure,可以像这样调用它

<?php
// config/elasticsearch.php

...

'hosts' => [
    [
        ...
        'aws_credentials' => [\Aws\Credentials\CredentialProvider::class, 'defaultProvider'],
    ],
],

Lumen

如果您使用Lumen,请在bootstrap/app.php文件中注册服务提供程序和配置

$app->register(Cviebrock\LaravelElasticsearch\ServiceProvider::class);
$app->configure('elasticsearch');

手动将配置文件复制到您的应用程序中。

用法

Elasticsearch门面只是ES客户端的入口点,所以之前您可能使用过

use Elasticsearch\ClientBuilder;

$data = [
    'body' => [
        'testField' => 'abc'
    ],
    'index' => 'my_index',
    'type' => 'my_type',
    'id' => 'my_id',
];

$client = ClientBuilder::create()->build();
$return = $client->index($data);

现在您可以简单地用这两行替换它们

use Elasticsearch;

$return = Elasticsearch::index($data);

这将在默认连接上运行命令。您可以在任何连接上运行命令(请参阅配置文件中的defaultConnection设置和connections数组)。

$return = Elasticsearch::connection('connectionName')->index($data);

希望使用Facades的Lumen用户可以通过编辑bootstrap/app.php文件来包含以下内容

$app->withFacades(true, [
    ...
    Cviebrock\LaravelElasticsearch\Facade::class => 'Elasticsearch',
    ...
]);

没有使用外观的Lumen用户需要使用依赖注入或应用程序容器来获取ES服务对象。

// using injection:
public function handle(\Cviebrock\LaravelElasticsearch\Manager $elasticsearch)
{
    $elasticsearch->ping();
}

// using application container:
$elasticSearch = $this->app('elasticsearch');

当然,依赖注入和应用容器也适用于Laravel应用程序。

高级用法

由于该包是官方Elastic客户端的包装,您可以使用此包做很多事情。除了执行标准的CRUD操作外,您还可以通过程序方式监控Elastic集群的健康状况、进行备份或对其进行更改。其中一些操作通过“命名空间”命令完成,该包对此表示支持。

获取索引的统计信息

$stats = Elasticsearch::indices()->stats(['index' => 'my_index']);
$stats = Elasticsearch::nodes()->stats();
$stats = Elasticsearch::cluster()->stats();

创建和恢复快照(首先阅读有关创建存储库路径和插件的Elastic文档)

$response = Elasticsearch::snapshots()->create($params);
$response = Elasticsearch::snapshots()->restore($params);

删除整个索引(请注意!)

$response = Elasticsearch::indices()->delete(['index' => 'my_index']);

请记住,此包是围绕大量非常复杂且文档完善的Elastic功能的一个薄包装。有关这些功能及其调用它们的方法和参数的信息,请参阅Elastic文档。有关使用这些功能的帮助,可在Elastic论坛和类似Stack Overflow的网站上找到。

控制台命令

此包还提供了一些有用的控制台命令。

检查索引是否存在

php artisan laravel-elasticsearch:utils:index-exists <your_elasticsearch_index_name>

创建索引

php artisan laravel-elasticsearch:utils:index-create <your_elasticsearch_index_name>

删除索引

php artisan laravel-elasticsearch:utils:index-delete <your_elasticsearch_index_name>

创建或更新索引映射
注意:索引映射文件必须包含Elasticsearch期望的有效的JSON映射定义,例如

{
    "body": {
        "_source": {
            "enabled": true
        },
        "properties": {
            "id": {
                "type": "keyword"
            },
            "property_1": {
                "type": "text"
            },
            "property_2": {
                "type": "text"
            }
        }
    }
}
php artisan laravel-elasticsearch:utils:index-create-or-update-mapping <your_elasticsearch_index_name> <json_mapping_absolute_file_path>

创建别名

php artisan laravel-elasticsearch:utils:alias-create <your_elasticsearch_index_name> <your_elasticsearch_alias_name>

从别名中删除索引

php artisan laravel-elasticsearch:utils:alias-remove-index <your_elasticsearch_index_name> <your_elasticsearch_alias_name>

在别名上切换索引(对于新索引的无缝发布很有用)

php artisan laravel-elasticsearch:utils:alias-switch-index <your_NEW_elasticsearch_index_name> <your_OLD_elasticsearch_index_name> <your_elasticsearch_alias_name>

错误、建议、贡献和支持

感谢所有为该项目做出贡献的人!

请使用Github报告错误、发表评论或建议。

有关如何贡献更改,请参阅CONTRIBUTING.md

版权和许可证

laravel-elasticsearchColin Viebrock编写,并按照MIT许可证发布。

版权(c)2015 Colin Viebrock