123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogSearch\Model\Indexer;
- use Magento\Framework\App\ResourceConnection;
- use Magento\Framework\DB\Adapter\AdapterInterface;
- use Magento\Framework\DB\Ddl\Table;
- use Magento\Framework\Search\Request\Dimension;
- use Magento\Framework\Indexer\IndexStructureInterface;
- use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;
- use Magento\Framework\Search\Request\IndexScopeResolverInterface;
- /**
- * Catalog search index structure.
- *
- * @api
- * @since 100.0.2
- */
- class IndexStructure implements IndexStructureInterface
- {
- /**
- * @var Resource
- */
- private $resource;
- /**
- * @var IndexScopeResolver
- */
- private $indexScopeResolver;
- /**
- * @param ResourceConnection $resource
- * @param IndexScopeResolverInterface $indexScopeResolver
- */
- public function __construct(
- ResourceConnection $resource,
- IndexScopeResolverInterface $indexScopeResolver
- ) {
- $this->resource = $resource;
- $this->indexScopeResolver = $indexScopeResolver;
- }
- /**
- * @inheritdoc
- */
- public function delete($index, array $dimensions = [])
- {
- $tableName = $this->indexScopeResolver->resolve($index, $dimensions);
- if ($this->resource->getConnection()->isTableExists($tableName)) {
- $this->resource->getConnection()->dropTable($tableName);
- }
- }
- /**
- * @inheritdoc
- */
- public function create($index, array $fields, array $dimensions = [])
- {
- $this->createFulltextIndex($this->indexScopeResolver->resolve($index, $dimensions));
- }
- /**
- * Create fulltext index table.
- *
- * @param string $tableName
- * @throws \Zend_Db_Exception
- * @return void
- */
- protected function createFulltextIndex($tableName)
- {
- $table = $this->resource->getConnection()->newTable($tableName)
- ->addColumn(
- 'entity_id',
- Table::TYPE_INTEGER,
- 10,
- ['unsigned' => true, 'nullable' => false],
- 'Entity ID'
- )->addColumn(
- 'attribute_id',
- Table::TYPE_INTEGER,
- 10,
- ['unsigned' => true, 'nullable' => false]
- )->addColumn(
- 'data_index',
- Table::TYPE_TEXT,
- '4g',
- ['nullable' => true],
- 'Data index'
- )->addIndex(
- 'idx_primary',
- ['entity_id', 'attribute_id'],
- ['type' => AdapterInterface::INDEX_TYPE_PRIMARY]
- )->addIndex(
- 'FTI_FULLTEXT_DATA_INDEX',
- ['data_index'],
- ['type' => AdapterInterface::INDEX_TYPE_FULLTEXT]
- );
- $this->resource->getConnection()->createTable($table);
- }
- }
|