123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Elasticsearch\Model\Adapter\Index;
- use Magento\Elasticsearch\Model\Client\Elasticsearch as ElasticsearchClient;
- use Magento\Elasticsearch\SearchAdapter\ConnectionManager;
- use Magento\Elasticsearch\Model\Config;
- use Psr\Log\LoggerInterface;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\CatalogSearch\Model\Indexer\Fulltext;
- /**
- * Index name resolver
- * @api
- * @since 100.1.0
- */
- class IndexNameResolver
- {
- /**
- * @var ConnectionManager
- * @since 100.1.0
- */
- protected $connectionManager;
- /**
- * @var Config
- * @since 100.1.0
- */
- protected $clientConfig;
- /**
- * @var ElasticsearchClient
- * @since 100.1.0
- */
- protected $client;
- /**
- * @var LoggerInterface
- * @since 100.1.0
- */
- protected $logger;
- /**
- * Constructor for Index Name Resolver
- *
- * @param ConnectionManager $connectionManager
- * @param Config $clientConfig
- * @param LoggerInterface $logger
- * @param array $options
- * @throws LocalizedException
- */
- public function __construct(
- ConnectionManager $connectionManager,
- Config $clientConfig,
- LoggerInterface $logger,
- $options = []
- ) {
- $this->connectionManager = $connectionManager;
- $this->clientConfig = $clientConfig;
- $this->logger = $logger;
- try {
- $this->client = $this->connectionManager->getConnection($options);
- } catch (\Exception $e) {
- $this->logger->critical($e);
- throw new LocalizedException(
- __('The search failed because of a search engine misconfiguration.')
- );
- }
- }
- /**
- * Get index namespace from config
- *
- * @return string
- * @since 100.1.0
- */
- protected function getIndexNamespace()
- {
- return $this->clientConfig->getIndexPrefix();
- }
- /**
- * Get index namespace from config
- *
- * @param int $storeId
- * @param string $mappedIndexerId
- *
- * @return string
- * @since 100.1.0
- */
- public function getIndexNameForAlias($storeId, $mappedIndexerId)
- {
- return $this->clientConfig->getIndexPrefix() . '_' . $mappedIndexerId . '_' . $storeId;
- }
- /**
- * Returns the index name
- *
- * @param int $storeId
- * @param string $mappedIndexerId
- * @param array $preparedIndex
- * @return string
- * @since 100.1.0
- */
- public function getIndexName($storeId, $mappedIndexerId, array $preparedIndex)
- {
- if (isset($preparedIndex[$storeId])) {
- return $preparedIndex[$storeId];
- } else {
- $indexName = $this->getIndexFromAlias($storeId, $mappedIndexerId);
- if (empty($indexName)) {
- $indexName = $this->getIndexPattern($storeId, $mappedIndexerId) . 1;
- }
- }
- return $indexName;
- }
- /**
- * Returns index pattern.
- *
- * @param int $storeId
- * @param string $mappedIndexerId
- * @return string
- * @since 100.1.0
- */
- public function getIndexPattern($storeId, $mappedIndexerId)
- {
- return $this->getIndexNamespace() . '_' . $mappedIndexerId . '_' . $storeId . '_v';
- }
- /**
- * Returns index for store in alias definition.
- *
- * @param int $storeId
- * @param string $mappedIndexerId
- * @return string
- * @since 100.1.0
- */
- public function getIndexFromAlias($storeId, $mappedIndexerId)
- {
- $storeIndex = '';
- $indexPattern = $this->getIndexPattern($storeId, $mappedIndexerId);
- $namespace = $this->getIndexNamespace() . '_' . $mappedIndexerId . '_' . $storeId;
- if ($this->client->existsAlias($namespace)) {
- $alias = $this->client->getAlias($namespace);
- $indices = array_keys($alias);
- foreach ($indices as $index) {
- if (strpos($index, $indexPattern) === 0) {
- $storeIndex = $index;
- break;
- }
- }
- }
- return $storeIndex;
- }
- /**
- * Taking index name by indexer ID
- *
- * @param string $indexerId
- * @return string
- * @since 100.1.0
- */
- public function getIndexMapping($indexerId)
- {
- if ($indexerId == Fulltext::INDEXER_ID) {
- $mappedIndexerId = 'product';
- } else {
- $mappedIndexerId = $indexerId;
- }
- return $mappedIndexerId;
- }
- }
|