123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Indexer;
- use Magento\Framework\App\ResourceConnection;
- use Magento\Framework\DB\Adapter\AdapterInterface;
- use Magento\Framework\DB\Ddl\Table;
- use Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver;
- use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;
- use Magento\Framework\Search\Request\Dimension;
- /**
- * Full text search index structure.
- *
- * @deprecated 102.0.0
- * @see \Magento\ElasticSearch
- */
- class IndexStructure implements IndexStructureInterface
- {
- /**
- * @var Resource
- */
- private $resource;
- /**
- * @var \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver
- */
- private $indexScopeResolver;
- /**
- * @var FlatScopeResolver
- */
- private $flatScopeResolver;
- /**
- * @var array
- */
- protected $columnTypesMap = [
- 'varchar' => ['type' => Table::TYPE_TEXT, 'size' => 255],
- 'mediumtext' => ['type' => Table::TYPE_TEXT, 'size' => 16777216],
- 'text' => ['type' => Table::TYPE_TEXT, 'size' => 65536],
- ];
- /**
- * @param ResourceConnection $resource
- * @param IndexScopeResolver $indexScopeResolver
- * @param \Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver $flatScopeResolver
- * @param array $columnTypesMap
- */
- public function __construct(
- ResourceConnection $resource,
- IndexScopeResolver $indexScopeResolver,
- FlatScopeResolver $flatScopeResolver,
- array $columnTypesMap = []
- ) {
- $this->resource = $resource;
- $this->indexScopeResolver = $indexScopeResolver;
- $this->flatScopeResolver = $flatScopeResolver;
- $this->columnTypesMap = array_merge($this->columnTypesMap, $columnTypesMap);
- }
- /**
- * @inheritdoc
- */
- public function delete($index, array $dimensions = [])
- {
- $this->dropTable($this->resource->getConnection(), $this->indexScopeResolver->resolve($index, $dimensions));
- $this->dropTable($this->resource->getConnection(), $this->flatScopeResolver->resolve($index, $dimensions));
- }
- /**
- * @inheritdoc
- */
- public function create($index, array $fields, array $dimensions = [])
- {
- $this->createFulltextIndex($this->indexScopeResolver->resolve($index, $dimensions));
- if ($fields) {
- $this->createFlatIndex($this->flatScopeResolver->resolve($index, $dimensions), $fields);
- }
- }
- /**
- * Create full text index.
- *
- * @param string $tableName
- * @throws \Zend_Db_Exception
- * @return void
- */
- protected function createFulltextIndex($tableName)
- {
- $table = $this->configureFulltextTable($this->resource->getConnection()->newTable($tableName));
- $this->resource->getConnection()->createTable($table);
- }
- /**
- * Configure full text index table.
- *
- * @param Table $table
- * @return Table
- */
- protected function configureFulltextTable(Table $table)
- {
- $table->addColumn(
- 'entity_id',
- Table::TYPE_INTEGER,
- 10,
- ['unsigned' => true, 'nullable' => false],
- 'Entity ID'
- )->addColumn(
- 'attribute_id',
- Table::TYPE_TEXT,
- 255,
- ['unsigned' => true, 'nullable' => true]
- )->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]
- );
- return $table;
- }
- /**
- * Create flat index.
- *
- * @param string $tableName
- * @param array $fields
- * @throws \Zend_Db_Exception
- * @return void
- */
- protected function createFlatIndex($tableName, array $fields)
- {
- $table = $this->resource->getConnection()->newTable($tableName);
- $table->addColumn(
- 'entity_id',
- Table::TYPE_INTEGER,
- 10,
- ['unsigned' => true, 'nullable' => false],
- 'Entity ID'
- );
- foreach ($fields as $field) {
- if ($field['type'] !== 'filterable') {
- continue;
- }
- $columnMap = isset($field['dataType']) && isset($this->columnTypesMap[$field['dataType']])
- ? $this->columnTypesMap[$field['dataType']]
- : ['type' => $field['type'], 'size' => isset($field['size']) ? $field['size'] : null];
- $name = $field['name'];
- $type = $columnMap['type'];
- $size = $columnMap['size'];
- $table->addColumn($name, $type, $size);
- }
- $this->resource->getConnection()->createTable($table);
- }
- /**
- * Drop table.
- *
- * @param AdapterInterface $connection
- * @param string $tableName
- * @return void
- */
- private function dropTable(AdapterInterface $connection, $tableName)
- {
- if ($connection->isTableExists($tableName)) {
- $connection->dropTable($tableName);
- }
- }
- }
|