添加的站内搜索功能,当我在Silverstripe启用FullTextSearchable,它的页表转换为默认的MyISAM,但我只需要保留的InnoDB表。 我使用的MySQL版本> 5.6(所以,它支持全文)Silverstripe FulltextSearchable转换表引擎在MyISAM
0
A
回答
0
全文搜索仅在MyISAM中提供。这是MyISAM对InnoDB的主要优势之一。相关:https://dba.stackexchange.com/questions/1/what-are-the-main-differences-between-innodb-and-myisam
5
正如您已经指出InnoDB支持从版本MySQL 5.6开始的全文搜索,但随框架附带的MySQLSchemaManager
阻止您将InnoDB用于定义具有全文索引的表。也许你可以在GitHub上提出一个问题。你可以(通过扩展MySQLSchemaManager
和压倒一切的alterTable()
)创建没有此限制自己SchemaManager:
# Compare this to https://github.com/silverstripe/silverstripe-framework/blob/3.5/model/connect/MySQLSchemaManager.php#L100
class MyCustomSchemaManager extends MySQLSchemaManager
{
public function alterTable($tableName, $newFields = null, $newIndexes = null, $alteredFields = null,
$alteredIndexes = null, $alteredOptions = null, $advancedOptions = null
) {
if ($this->isView($tableName)) {
$this->alterationMessage(
sprintf("Table %s not changed as it is a view", $tableName),
"changed"
);
return;
}
$alterList = array();
if ($newFields) {
foreach ($newFields as $k => $v) {
$alterList[] .= "ADD \"$k\" $v";
}
}
if ($newIndexes) {
foreach ($newIndexes as $k => $v) {
$alterList[] .= "ADD " . $this->getIndexSqlDefinition($k, $v);
}
}
if ($alteredFields) {
foreach ($alteredFields as $k => $v) {
$alterList[] .= "CHANGE \"$k\" \"$k\" $v";
}
}
if ($alteredIndexes) {
foreach ($alteredIndexes as $k => $v) {
$alterList[] .= "DROP INDEX \"$k\"";
$alterList[] .= "ADD " . $this->getIndexSqlDefinition($k, $v);
}
}
$dbID = self::ID;
if ($alteredOptions && isset($alteredOptions[$dbID])) {
$this->query(sprintf("ALTER TABLE \"%s\" %s", $tableName, $alteredOptions[$dbID]));
$this->alterationMessage(
sprintf("Table %s options changed: %s", $tableName, $alteredOptions[$dbID]),
"changed"
);
}
$alterations = implode(",\n", $alterList);
$this->query("ALTER TABLE \"$tableName\" $alterations");
}
}
然后你可以使用Injector
使用您的自定义类:
# Config.yml
Injector:
MySQLSchemaManager:
class: MyCustomSchemaManager
您现在应该能够使用静态create_table_options
强制InnoDB引擎,并通过indexes
静态创建全文索引。
例子:
# SomePage.php
/**
* Force InnoDB database engine.
*
* @var array
*/
private static $create_table_options = [
'MySQLDatabase' => 'ENGINE=InnoDB'
];
/**
* Define what fulltext indexes to create.
*
* @var array
*/
private static $indexes = [
'SearchFields' => [
'type' => 'fulltext',
'name' => 'SearchFields',
'value' => '"MyField", "Tags"',
]
];
相关问题
- 1. Innodb引擎和Myisam引擎
- 2. Silverstripe FulltextSearchable搜索与其他滤光器
- 3. 的MySQL - InnoDB的转换对MyISAM存储引擎数据库
- 4. 哪个引擎? InnoDb或MyISAM?
- 5. MyIsam引擎事务支持
- 6. Silverstripe:添加到转换表
- 7. 将引擎类型更改为MyISAM未知引擎
- 8. 是什么在MySQL表(MyISAM引擎)TableName.MYD.filepart文件
- 9. Openfire - MySQL存储引擎:InnoDB或MyISAM?
- 10. MyISAM引擎上的MySQL回滚
- 11. mysql MyISAM与NDB存储引擎重读
- 12. 构建转换引擎
- 13. 将表从MyISAM转换为INNODB
- 14. 转换大型的MyISAM表到InnoDB的
- 15. 在MyISAM和InnobDB引擎中使用了哪种索引?
- 16. 从myisam转换到innodb
- 17. phpmyadmin将myisam转换为innodb
- 18. mysql - 将表引擎从innoDB更改为MyISAM
- 19. 如何知道mysql表是否使用myISAM或InnoDB引擎?
- 20. 如何将表存储引擎从MyISAM更改为InnoDB
- 21. 如果引擎是MyISAM,表中没有外键
- 22. 将MySQL默认表引擎从MyISAM更改为InnoDB
- 23. MYSQL从INNODB到MYISAM的表更改存储引擎
- 24. 在MySQL中将MyISAM转换为InnoDB
- 25. 如何区分哪些变量用于innodb引擎或MyIsam引擎?
- 26. 为什么是MyISAM存储引擎比InnoDB存储引擎更快
- 27. 幻影在InnoDB,MyISAM和其他引擎中读取
- 28. 如何导入mysqldump没有在MyISAM中指定的引擎
- 29. 如何在MySQL MyISAM存储引擎上使用删除级联?
- 30. 在应该使用情况MyISAM和InnoDB引擎
是,InnoDB的不支持它,直到MySQL的V5.6。但是,MySQL版本高于5.6。它确实支持全文搜索。 – Vishal
我希望所有表在InnoDB中的原因是它可能会导致AWS上的自动备份问题。 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#Overview.BackupDeviceRestrictions – Vishal