Django 1.7 以上の DB マイグレーション機能で、MySQL のフルテキストインデックスを作らせる方法です。
ちなみに、MySQL 5.6 以上は、InnoDB にもフルテキストインデックスが作れます。
はじめに、sqlparse モジュールが必要なので入れておきます。
$ pip install sqlparse
あらかじめ モデルには、フルテキストインデックスを貼るためのテキストフィールドを作っておきます。
class HogeSearch(models.Model): ... search_text = models.TextField(default='', blank=True)
そして、まずは普通にマイグレーションファイルを作ります。
$ ./manage.py makemigrations hogeapp
その次に、空のマイグレーションファイルを作ります。
$ ./manage.py makemigrations hogeapp --empty
できたマイグレーションファイルを見てみると、operations というリストが作られてますので、その中に migrations.RunSQL インスタンスを入れます。
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ('hogeapp', '0001_initial'), ] operations = [ migrations.RunSQL( "CREATE FULLTEXT INDEX i_search_text ON hogeapp_hogemodel (search_text)", "DROP INDEX i_search_text ON hogeapp_hogemodel"), ]
migrations.RunSQL の第二引数は、リバースマイグレーション用の SQLなので、無くても大丈夫です。 ( ただし、無い場合はリバースマイグレーション (例: ./manage.py migrate hogeapp 0001 ) しようとすると、 Migration.IrreversibleError 例外が出て失敗します。)
出来たマイグレーションを実行すると、フルテキストインデックスが貼られます。
$ ./manage.py migrate hogeapp
コメント