/ElasticsearchBundle

Integration of the Elasticsearch official PHP client within a Symfony Project

Primary LanguagePHPMIT LicenseMIT

ElasticsearchBundle Build Status

Integration of the Elasticsearch official PHP client within a Symfony Project.

Features

This bundle creates one or more Elasticsearch client services from settings defined in the application configuration.

Usage

Installation

You must first add the bundle to your composer.json:

    "require": {
        "m6web/elasticsearch-bundle": "dev-master"
    }

Then register the bundle in your AppKernel class:

<?php
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new M6Web\Bundle\ElasticsearchBundle\M6WebElasticsearchBundle(),
        );
        // ...
    }

Configuration

In your config.yml, you can configure one or more Elasticsearch clients:

m6web_elasticsearch:
    default_client: my_client
    clients:
        my_client:
            hosts:
                - 'localhost:9200'
                - 'http://other_host:9201'
        my_other_client:
            hosts:
                - 'other_server:9200'

From this configuration, the bundle will create two services :

  • m6web_elasticsearch.client.my_client that will connect to two Elasticsearch instances: localhost on port 9200 and other_host on port 9201
  • m6web_elasticsearch.client.my_other_client that will connect to one Elasticsearch instances: other_server on port 9200

It will also create m6web_elasticsearch.client.default which is an alias for m6web_elasticsearch.client.my_client

Additional configuration

Each client can have additional configuration parameters that will be used to instanciate the \Elasticsearch\Client. Ex:

m6web_elasticsearch:
    clients:
        my_client:
            hosts:
                - 'localhost:9200'
            connectionPoolClass: '\Elasticsearch\ConnectionPool\StaticNoPingConnectionPool'
            logging: true
            logLevel: warning
            connectionParams: 
                auth:
                    - username
                    - password
                    - Basic

For the logObject and traceObject parameters, you must specify a service name. Example for using the my_logger service:

m6web_elasticsearch:
    clients:
        my_logged_client:
            hosts:
                - 'localhost:9200'
            logging: true
            logObject: my_logger
            logLevel: warning

Events

The bundle dispatches \M6Web\Bundle\ElasticsearchBundle\EventDispatcher\ElasticsearchEvent events containing various informations about the Elasticsearch requests.

Events are fired with the name m6web.elasticsearch.

Tests

You can launch the unit tests using:

./vendor/bin/atoum

Roadmap

  • Dispatch some events to the Symfony2 eventDispatcher
  • Integrate debugging/profiling informations to the Symfony2 Web Debug Toolbar

License

ElasticsearchBundle is licensed under the MIT license.