Djangoでは、バージョン1.11以降、PostgreSQL GinIndex
( https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/ )のクラスがあります。テーブルの1つに追加したVectorSearchField
にそのようなインデックスを構築する移行を作成したいと思います。これまで、_db_index=True
_をVectorSearchField
に単純に追加しようとしましたが、Bツリーインデックス(私は思う)とVectorSearchField
を作成しようとするため、失敗します。値が長すぎます。
migrations.RunSQL()
マイグレーションを実行して、必要なインデックスを作成できました。
_CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
_
ただし、Djangoには特別なGinIndex
クラスがあるので、生のSQLを実行せずにそのようなインデックスを作成する方法があるのではないでしょうか。
モデルクラスは次のとおりです。
_import Django.contrib.postgres.search as pg_search
class EntryLine(models.Model):
speaker = models.CharField(max_length=512, db_index=True)
text = models.TextField()
sv = pg_search.SearchVectorField(null=True) # I want a GIN index on this field.
_
移行でsv
フィールドのインデックスを適切に作成する方法はありますか?または、_CREATE INDEX ...
_クエリを実行するのが最善の方法ですか?
古い手動のCREATEINDEXコードを1.11で導入された新しいシステムに移行する機会はまだありませんが、私の理解は
from Django.contrib.postgres.indexes import GinIndex
import Django.contrib.postgres.search as pg_search
class EntryLine(models.Model):
speaker = models.CharField(max_length=512, db_index=True)
text = models.TextField()
sv = pg_search.SearchVectorField(null=True)
class Meta:
indexes = [GinIndex(fields=['sv'])]
必要なものです。生のSQLCREATEINDEXステートメントはもう使用する必要はありません