|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / Mirasvit / SearchElasticNative / Model / Index / |
Filename | /home/Mirasvit/SearchElasticNative/Model/Index/IndexNameResolver.php |
Size | 3.97 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 01-Jul-2024 20:52 |
Last modified | 06-Apr-2021 18:06 |
Last accessed | 22-Aug-2025 07:27 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Mirasvit
*
* This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
* Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
* If you wish to customize this module for your needs.
* Please refer to http://www.magentocommerce.com for more information.
*
* @category Mirasvit
* @package mirasvit/module-search
* @version 1.0.151
* @copyright Copyright (C) 2020 Mirasvit (https://mirasvit.com/)
*/
namespace Mirasvit\SearchElasticNative\Model\Index;
use Magento\Framework\Search\Request\Dimension;
use Magento\Elasticsearch\Model\Adapter\Index\IndexNameResolver as ElasticIndexNameResolver;
use Magento\Elasticsearch\SearchAdapter\ConnectionManager;
use Magento\Elasticsearch\Model\Config;
use Psr\Log\LoggerInterface;
use Mirasvit\Core\Service\CompatibilityService;
class IndexNameResolver extends ElasticIndexNameResolver
{
/**
* @var \Magento\CatalogSearch\Model\Indexer\Scope\ScopeProxy
*/
private $indexScopeResolver;
/**
* {@inheritDoc}
*/
public function __construct(
ConnectionManager $connectionManager,
Config $clientConfig,
LoggerInterface $logger,
$options = []
) {
parent::__construct($connectionManager, $clientConfig, $logger, $options);
$this->indexScopeResolver = CompatibilityService::getObjectManager()
->create('Magento\CatalogSearch\Model\Indexer\Scope\ScopeProxy');
}
/**
* {@inheritDoc}
* Added support for indexer level to @param array $preparedIndex
*/
public function getIndexName($storeId, $mappedIndexerId, array $preparedIndex)
{
if (isset($preparedIndex[$storeId][$mappedIndexerId])) {
return $preparedIndex[$storeId][$mappedIndexerId];
} else {
$indexName = $this->getIndexFromAlias($storeId, $mappedIndexerId);
if (empty($indexName)) {
$indexName = $this->getIndexPattern($storeId, $mappedIndexerId) . 1;
}
}
return $indexName;
}
/**
* {@inheritDoc}
*/
public function getIndexNameForAlias($storeId, $mappedIndexerId)
{
if ($mappedIndexerId == Config::ELASTICSEARCH_TYPE_DEFAULT) {
return parent::getIndexNameForAlias($storeId, $mappedIndexerId);
} else {
$dimension = new Dimension('scope', $storeId);
$indexName = $this->indexScopeResolver->resolve($mappedIndexerId, [$dimension]);
return $this->getIndexNamespace() . '_' . $indexName;
}
}
/**
* {@inheritDoc}
*/
public function getIndexPattern($storeId, $mappedIndexerId)
{
if ($mappedIndexerId == Config::ELASTICSEARCH_TYPE_DEFAULT) {
return parent::getIndexPattern($storeId, $mappedIndexerId);
} else {
$dimension = new Dimension('scope', $storeId);
$indexName = $this->indexScopeResolver->resolve($mappedIndexerId, [$dimension]);
return $this->getIndexNamespace() . '_' . $indexName . '_v';
}
}
/**
* {@inheritDoc}
*/
public function getIndexFromAlias($storeId, $mappedIndexerId)
{
if ($mappedIndexerId == Config::ELASTICSEARCH_TYPE_DEFAULT) {
return parent::getIndexFromAlias($storeId, $mappedIndexerId);
} else {
$storeIndex = '';
$indexPattern = $this->getIndexPattern($storeId, $mappedIndexerId);
$namespace = $this->getIndexNameForAlias($storeId, $mappedIndexerId);
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;
}
}
}
/**
* Mirasvit
*
* This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
* Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
* If you wish to customize this module for your needs.
* Please refer to http://www.magentocommerce.com for more information.
*
* @category Mirasvit
* @package mirasvit/module-search
* @version 1.0.151
* @copyright Copyright (C) 2020 Mirasvit (https://mirasvit.com/)
*/
namespace Mirasvit\SearchElasticNative\Model\Index;
use Magento\Framework\Search\Request\Dimension;
use Magento\Elasticsearch\Model\Adapter\Index\IndexNameResolver as ElasticIndexNameResolver;
use Magento\Elasticsearch\SearchAdapter\ConnectionManager;
use Magento\Elasticsearch\Model\Config;
use Psr\Log\LoggerInterface;
use Mirasvit\Core\Service\CompatibilityService;
class IndexNameResolver extends ElasticIndexNameResolver
{
/**
* @var \Magento\CatalogSearch\Model\Indexer\Scope\ScopeProxy
*/
private $indexScopeResolver;
/**
* {@inheritDoc}
*/
public function __construct(
ConnectionManager $connectionManager,
Config $clientConfig,
LoggerInterface $logger,
$options = []
) {
parent::__construct($connectionManager, $clientConfig, $logger, $options);
$this->indexScopeResolver = CompatibilityService::getObjectManager()
->create('Magento\CatalogSearch\Model\Indexer\Scope\ScopeProxy');
}
/**
* {@inheritDoc}
* Added support for indexer level to @param array $preparedIndex
*/
public function getIndexName($storeId, $mappedIndexerId, array $preparedIndex)
{
if (isset($preparedIndex[$storeId][$mappedIndexerId])) {
return $preparedIndex[$storeId][$mappedIndexerId];
} else {
$indexName = $this->getIndexFromAlias($storeId, $mappedIndexerId);
if (empty($indexName)) {
$indexName = $this->getIndexPattern($storeId, $mappedIndexerId) . 1;
}
}
return $indexName;
}
/**
* {@inheritDoc}
*/
public function getIndexNameForAlias($storeId, $mappedIndexerId)
{
if ($mappedIndexerId == Config::ELASTICSEARCH_TYPE_DEFAULT) {
return parent::getIndexNameForAlias($storeId, $mappedIndexerId);
} else {
$dimension = new Dimension('scope', $storeId);
$indexName = $this->indexScopeResolver->resolve($mappedIndexerId, [$dimension]);
return $this->getIndexNamespace() . '_' . $indexName;
}
}
/**
* {@inheritDoc}
*/
public function getIndexPattern($storeId, $mappedIndexerId)
{
if ($mappedIndexerId == Config::ELASTICSEARCH_TYPE_DEFAULT) {
return parent::getIndexPattern($storeId, $mappedIndexerId);
} else {
$dimension = new Dimension('scope', $storeId);
$indexName = $this->indexScopeResolver->resolve($mappedIndexerId, [$dimension]);
return $this->getIndexNamespace() . '_' . $indexName . '_v';
}
}
/**
* {@inheritDoc}
*/
public function getIndexFromAlias($storeId, $mappedIndexerId)
{
if ($mappedIndexerId == Config::ELASTICSEARCH_TYPE_DEFAULT) {
return parent::getIndexFromAlias($storeId, $mappedIndexerId);
} else {
$storeIndex = '';
$indexPattern = $this->getIndexPattern($storeId, $mappedIndexerId);
$namespace = $this->getIndexNameForAlias($storeId, $mappedIndexerId);
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;
}
}
}