cviebrock / laravel-elasticsearch-handlers
使用Laravel结合Elasticsearch更加便捷
Requires
- php: >=5.4.0
- cviebrock/laravel-elasticsearch: ~0.9
- illuminate/support: ~4|~5
This package is auto-updated.
Last update: 2024-09-05 17:37:25 UTC
README
更简单的方式在Laravel应用中使用官方Elasticsearch客户端。
安装和配置
-
通过composer安装
cviebrock/laravel-elasticsearch-handlers
包$ composer require cviebrock/laravel-elasticsearch-handlers
-
发布配置文件。对于Laravel 5
php artisan vendor:publish cviebrock/laravel-elasticsearch-handlers
为了使此包也能与Laravel 4一起使用,我们无法像大多数Laravel 4包那样执行标准配置发布。您只需将配置文件复制到应用程序的配置文件夹中即可
cp vendor/cviebrock/laravel-elasticsearch-handlers/config/elasticsearch-handlers.php app/config/
-
添加服务提供者(Laravel 5的
config/app.php
或Laravel 4的app/config/app.php
)。服务提供者需要放在LaravelElasticsearch
提供者之后,因为我们“劫持”了该包的Manager类并使用了我们自己的。'providers' => array( ... 'Cviebrock\LaravelElasticSearch\ServiceProvider', 'Cviebrock\LaravelElasticSearchHandlers\ServiceProvider', )
用法
此包通过返回一个“装饰”过的Elasticsearch客户端类来扩展 laravel-elasticsearch
包,而不是默认的PHP客户端。您可以根据连接的每个实例配置客户端的装饰方式。
以下是一个示例 elasticsearch-handlers.php
配置
<?php return [ 'connections' => [ 'default' => [ 'clientClass' => 'Cviebrock\LaravelElasticsearchHandlers\Client', 'handlers' => [] ] ] ];
当您使用以下方式实例化Elasticsearch客户端时
$client = Elasticsearch::connection('default');
包将创建一个基本客户端(使用基本 elasticsearch.php
配置),然后将其包装在由 clientClass 设置定义的类中,并注入 handlers 数组。因此,在这种情况下,返回一个 Cviebrock\LaravelElasticsearchHandlers\Client
实例。
这个类是一个简单的客户端包装器。它不做任何事情,只是将所有命令传递给包装的基本Elasticsearch类。
让我们使其更有用...
创建处理器
假设你只有一个Elasticsearch实例在运行,但你需要它支持多个Laravel应用环境(例如,“beta”、“live”等)...
你不需要在每次索引文档时更新代码以确保指定正确的索引名称,那么客户端自动将当前Laravel环境的名称作为前缀添加到索引名称中会怎么样呢?
首先,按照以下方式设置包配置
return [ 'defaultClass' => 'Cviebrock\LaravelElasticsearchHandlers\Client', 'connections' => [ 'default' => [ 'MyEnvironmentIndexPrefixHandler' ] ] ];
然后创建处理器类(扩展BaseHandler类)
class MyEnvironmentIndexPrefixHandler extends Cviebrock\LaravelElasticsearchHandlers\Handlers\BaseHandler { /** * Auto-prefix the document index name with the current Laravel * environment. * * @param array $parameters * @return array */ public function handleIndex($parameters) { if ($index = array_get($parameters, 'index')) { $environment = mb_strtolower(preg_replace('/[^a-z0-9_\-]+/', '-', \App::environment())); $parameters['index'] = trim($environment, '-') . '-_' . $index; } return $parameters; } }
现在,每次您使用默认的Elasticsearch连接索引文档时,当前Laravel环境名称将自动添加到您数据数组的 index 键的前面。
$data = [ 'index' => 'my-index', 'type' => 'my-doctype', 'body' => [ 'content' => 'Lorem ipsum', ] ]; $return = Elasticsearch::index($data);
这会返回
array (size=5)
'_index' => string 'local-my-index' (length=14)
'_type' => string 'my-doctype' (length=10)
'_id' => string 'AU3U9R3kOpwouG512345' (length=20)
'_version' => int 1
'created' => boolean true
index 被自动添加前缀,因此您的应用程序可以在所有环境中工作而无需检查或更改。
此外,您可以为每个连接注册多个处理器,这意味着功能是“可链接的”。例如,将环境名添加到 index,并添加一些默认参数到 body 等。
特殊的 boot
方法
处理器也可以定义一个具有以下签名的 boot
方法
public function boot(\Cviebrock\LaravelElasticsearchHandlers\Client $client) {}
当处理器注册时运行此方法,因此可以用来在实例化时更改客户端的行为。客户端作为唯一参数传递。
预定义处理器
此包附带一些预定义处理器,所有这些都在 Cviebrock\LaravelElasticsearchHandlers\Handlers
命名空间中。
EnvironmentIndexPrefixHandler
操作以下方法
- index
这基本上与上述示例中使用的处理器相同。它将当前Laravel环境进行一些修改,使其符合Elasticsearch索引名称的约束,并将它添加到给定文档的 index 键中。
错误、建议和贡献
请使用Github提交错误、评论和建议。
- 分叉该项目。
- 创建你的修复错误/特性分支,并编写你的(注释良好的)代码。
- 提交你的更改(以及你的测试)并推送到你的分支。
- 针对
master
分支创建一个新的拉取请求。
版权和许可
Laravel-Elasticsearch-Handlers 由 Colin Viebrock 编写,并按照 MIT 许可证发布。有关详细信息,请参阅 LICENSE 文件。
版权所有 2015 Colin Viebrock