cviebrock/laravel-elasticsearch-handlers

使用Laravel结合Elasticsearch更加便捷

0.9.0 2015-06-09 20:42 UTC

This package is auto-updated.

Last update: 2024-09-05 17:37:25 UTC


README

更简单的方式在Laravel应用中使用官方Elasticsearch客户端。

Build Status Total Downloads Latest Stable Version Latest Stable Version

安装和配置

  1. 通过composer安装 cviebrock/laravel-elasticsearch-handlers

    $ composer require cviebrock/laravel-elasticsearch-handlers
  2. 发布配置文件。对于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/
  3. 添加服务提供者(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提交错误、评论和建议。

  1. 分叉该项目。
  2. 创建你的修复错误/特性分支,并编写你的(注释良好的)代码。
  3. 提交你的更改(以及你的测试)并推送到你的分支。
  4. 针对 master 分支创建一个新的拉取请求。

版权和许可

Laravel-Elasticsearch-Handlers 由 Colin Viebrock 编写,并按照 MIT 许可证发布。有关详细信息,请参阅 LICENSE 文件。

版权所有 2015 Colin Viebrock