在Django中,从版本1.11开始,我们有一个PostgreSQL GinIndex
(https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/)的类。我想在我添加到其中一个表的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 ...
查询?
答案 0 :(得分:16)
Haven还没有机会将我的旧手动CREATE INDEX代码迁移到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'])]
需要什么。不再需要使用原始SQL CREATE INDEX语句