MySQL Django south migration – 添加FULLTEXT索引
FULLTEXT索引是一种高效的文本搜索方法,MySQL支持在MyISAM和InnoDB表中创建FULLTEXT索引。Django作为一种优秀的Web开发框架,也允许我们使用south来管理数据库升级,那么如何使用south来在MySQL表中添加FULLTEXT索引呢?本文将为大家介绍具体的操作方法。
阅读更多:MySQL 教程
准备工作
在使用south之前,我们需要先将south安装到我们的Django项目中。假设我们已经完成了这一步,下面的操作将在既有的Django项目中进行。
MySQL中的FULLTEXT索引只能用在MyISAM和InnoDB表中,而InnoDB表又需要innodb_ft_server plugin插件的支持。在MySQL中,某个表是否已添加FULLTEXT索引可以通过如下命令查询:
SHOW CREATE TABLE my_table;
如果输出中含有FULLTEXT,说明该表中已经添加了FULLTEXT索引。
创建FULLTEXT索引
创建FULLTEXT索引需要三个步骤:1.将表类型改为MyISAM或InnoDB;2.添加FULLTEXT索引;3.将表类型改回InnoDB(如果该表原来是InnoDB类型),下面通过一个示例来说明如何用south进行这三个步骤。
假如我们现在有一个Article表,其中的text字段需要添加FULLTEXT索引。首先让我们看看Article表的定义:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
text = models.TextField()
首先,我们在models.py中为文本字段添加索引:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
text = models.TextField(db_index=True) # 添加索引
接下来,我们需要在south数据迁移文件中添加具体的迁移代码,这里我们使用South Data Migration特性来添加FULLTEXT索引,具体实现方法如下:
from south.db import db
from django.db import models
class Migration:
def forwards(self):
db.execute("ALTER TABLE myapp_article ENGINE=MyISAM")
db.create_index('myapp_article', ['text'], fulltext=True)
db.execute("ALTER TABLE myapp_article ENGINE=InnoDB")
在这个migration文件中,我们首先将myapp_article表类型更改为MyISAM,然后为text字段创建FULLTEXT索引;最后再将表类型改回InnoDB。此时,我们就已经为Article表中的text字段添加了FULLTEXT索引。
关于FULLTEXT索引的查询
添加了FULLTEXT索引,我们就可以在应用程序中使用全文搜索功能,以下是两种在MySQL中使用FULLTEXT索引的方式:
MATCH AGAINST搜索
SELECT * FROM my_table WHERE MATCH(column1,column2,...) AGAINST('search_text');
例如,我们要在Article表中搜索包含Python或Django的文章,可以使用如下语句:
SELECT * FROM myapp_article WHERE MATCH(text) AGAINST('Python Django');
BOOLEAN模式
SELECT * FROM my_table WHERE MATCH(column1,column2,...) AGAINST('+:search_text1 +search_text2');
例如,我们要在Article表中搜索同时包含Python和Django的文章,可以使用如下语句:
SELECT * FROM myapp_article WHERE MATCH(text) AGAINST('+:Python +Django' IN BOOLEAN MODE);
总结
FULLTEXT索引是一种高效的文本搜索方法,在MySQL InnoDB表中需要使用innodb_ft_server插件支持。在Django项目中,我们可以使用south来管理表的FULLTEXT索引,这也方便了我们进行全文搜索的开发。
极客教程