Headoo/ElasticSearchBundle

View on GitHub
Handler/ElasticSearchHandler.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Headoo\ElasticSearchBundle\Handler;

use Elastica\Exception\NotFoundException;
use Headoo\ElasticSearchBundle\Helper\ElasticSearchHelper;
use Symfony\Component\DependencyInjection\Container;

/**
 * Class ElasticSearchHandler
 * @package Headoo\ElasticSearchBundle\Handler
 */
class ElasticSearchHandler
{
    /** @var  ElasticSearchHelper */
    protected $elasticSearchHelper;

    /** @var  Container */
    protected $container;

    /** @var  array */
    protected $mappings;

    /**
     * @param Container $container
     */
    public function setContainer(Container $container)
    {
        $this->container                = $container;
        $this->elasticSearchHelper      = $container->get('headoo.elasticsearch.helper');
        $this->mappings                 = $this->container->getParameter('elastica_mappings');
    }

    /**
     * @param $entity
     * @param $transformer
     * @param $connectionName
     * @param $indexName
     */
    public function sendToElastic($entity, $transformer, $connectionName,$indexName)
    {
        $array      = explode("\\",get_class($entity));
        $type       = end($array);
        $document   = $this->container->get($transformer)->transform($entity);
        $index      = $this->elasticSearchHelper->getClient($connectionName)->getIndex($indexName);

        try {
            $index->getType($type)->addDocument($document);
            $index->refresh();
        } catch(NotFoundException $e) {

        }
    }

    /**
     * @param $entity
     * @param $connectionName
     * @param $indexName
     */
    public function removeFromElastic($entity, $connectionName, $indexName)
    {
        if (empty($entity->getId())) {
            return;
        }

        $array      = explode("\\",get_class($entity));
        $type       = end($array);
        $index      = $this->elasticSearchHelper->getClient($connectionName)->getIndex($indexName);

        try {
            $index->getType($type)->deleteById($entity->getId());
            $index->refresh();
        } catch(NotFoundException $e) {

        }
    }

    /**
     * @param $type
     * @return string
     */
    public function getIndexName($type)
    {
        if(array_key_exists('index_name', $this->mappings[$type])){
            $index_name = $this->mappings[$type]['index_name'];
        }else{
            $index_name = strtolower($type);
        }
        return $index_name;
    }

    /**
     * @return array
     */
    public function getMappings()
    {
        return $this->mappings;
    }

}