vendor/handcraftedinthealps/elasticsearch-bundle/Service/ManagerFactory.php line 172

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the ONGR package.
  4.  *
  5.  * (c) NFQ Technologies UAB <info@nfq.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace ONGR\ElasticsearchBundle\Service;
  11. use Elasticsearch\Client;
  12. use Elasticsearch\ClientBuilder;
  13. use ONGR\ElasticsearchBundle\Event\Events;
  14. use ONGR\ElasticsearchBundle\Event\PostCreateManagerEvent;
  15. use ONGR\ElasticsearchBundle\Event\PreCreateManagerEvent;
  16. use ONGR\ElasticsearchBundle\Mapping\MetadataCollector;
  17. use ONGR\ElasticsearchBundle\Result\Converter;
  18. use PackageVersions\Versions;
  19. use Psr\Log\LoggerInterface;
  20. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  21. use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
  22. use Symfony\Component\Stopwatch\Stopwatch;
  23. /**
  24.  * Elasticsearch Manager factory class.
  25.  */
  26. class ManagerFactory
  27. {
  28.     /**
  29.      * @var MetadataCollector
  30.      */
  31.     private $metadataCollector;
  32.     /**
  33.      * @var Converter
  34.      */
  35.     private $converter;
  36.     /**
  37.      * @var LoggerInterface
  38.      */
  39.     private $logger;
  40.     /**
  41.      * @var LoggerInterface
  42.      */
  43.     private $tracer;
  44.     /**
  45.      * @var EventDispatcherInterface
  46.      */
  47.     private $eventDispatcher;
  48.     /**
  49.      * @var Stopwatch
  50.      */
  51.     private $stopwatch;
  52.     /**
  53.      * @param MetadataCollector $metadataCollector Metadata collector service.
  54.      * @param Converter         $converter         Converter service to transform arrays to objects and visa versa.
  55.      * @param LoggerInterface   $tracer
  56.      * @param LoggerInterface   $logger
  57.      */
  58.     public function __construct($metadataCollector$converter$tracer null$logger null)
  59.     {
  60.         $this->metadataCollector $metadataCollector;
  61.         $this->converter $converter;
  62.         $this->tracer $tracer;
  63.         $this->logger $logger;
  64.     }
  65.     /**
  66.      * @param EventDispatcherInterface   $eventDispatcher
  67.      */
  68.     public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
  69.     {
  70.         $this->eventDispatcher $eventDispatcher;
  71.     }
  72.     /**
  73.      * @param Stopwatch $stopwatch
  74.      */
  75.     public function setStopwatch(Stopwatch $stopwatch)
  76.     {
  77.         $this->stopwatch $stopwatch;
  78.     }
  79.     /**
  80.      * Factory function to create a manager instance.
  81.      *
  82.      * @param string $managerName   Manager name.
  83.      * @param array  $connection    Connection configuration.
  84.      * @param array  $analysis      Analyzers, filters and tokenizers config.
  85.      * @param array  $managerConfig Manager configuration.
  86.      *
  87.      * @return Manager
  88.      */
  89.     public function createManager($managerName$connection$analysis$managerConfig)
  90.     {
  91.         $mappings $this->metadataCollector->getClientMapping($managerConfig['mappings']);
  92.         $client ClientBuilder::create();
  93.         $client->setHosts($connection['hosts']);
  94.         if ($this->tracer) {
  95.             $client->setTracer($this->tracer);
  96.         }
  97.         if ($this->logger && $managerConfig['logger']['enabled']) {
  98.             $client->setLogger($this->logger);
  99.         }
  100.         $indexSettings = [
  101.             'index' => $connection['index_name'],
  102.             'body' => array_filter(
  103.                 [
  104.                     'settings' => array_merge(
  105.                         $connection['settings'],
  106.                         [
  107.                             'analysis' =>
  108.                                 $this->metadataCollector->getClientAnalysis($managerConfig['mappings'], $analysis),
  109.                         ]
  110.                     ),
  111.                     'mappings' => $mappings,
  112.                 ]
  113.             ),
  114.         ];
  115.         // set elasticsearch specific settings
  116.         $elasticSearchVersion defined(Client::class . '::VERSION') ? Client::VERSION '5.0';
  117.         if (version_compare($elasticSearchVersion'7.0.0''>=')) {
  118.             $indexSettings['include_type_name'] = true;
  119.         }
  120.         $this->eventDispatcher &&
  121.             $this->dispatch(
  122.                 Events::PRE_MANAGER_CREATE,
  123.                 $preCreateEvent = new PreCreateManagerEvent($client$indexSettings)
  124.             );
  125.         $manager = new Manager(
  126.             $managerName,
  127.             $managerConfig,
  128.             $client->build(),
  129.             $preCreateEvent->getIndexSettings(),
  130.             $this->metadataCollector,
  131.             $this->converter
  132.         );
  133.         if (isset($this->stopwatch)) {
  134.             $manager->setStopwatch($this->stopwatch);
  135.         }
  136.         $manager->setCommitMode($managerConfig['commit_mode']);
  137.         $manager->setEventDispatcher($this->eventDispatcher);
  138.         $manager->setCommitMode($managerConfig['commit_mode']);
  139.         $manager->setBulkCommitSize($managerConfig['bulk_size']);
  140.         $this->eventDispatcher &&
  141.             $this->dispatch(Events::POST_MANAGER_CREATE, new PostCreateManagerEvent($manager));
  142.         return $manager;
  143.     }
  144.     private function dispatch($eventName$event)
  145.     {
  146.         if (class_exists(LegacyEventDispatcherProxy::class)) {
  147.             return $this->eventDispatcher->dispatch($event$eventName);
  148.         } else {
  149.             return $this->eventDispatcher->dispatch($eventName$event);
  150.         }
  151.     }
  152. }