Django迁移中如何创建GIN索引
How to create GIN index in Django migration
在 Django 中,从版本 1.11 开始我们有一个 class for PostgreSQL GinIndex
(https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/)。我想创建一个迁移,在我添加到我的一个表中的 VectorSearchField
上构建这样的索引。到目前为止,我尝试简单地将 db_index=True
添加到 VectorSearchField
,但是失败了,因为它试图创建一个 B-Tree 索引(我认为)并且 VectorSearchField
值是太长了。
我设法通过 运行 一个 migrations.RunSQL()
迁移创建了我想要的索引:
CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
但是,我想,由于 Django 中有一个特殊的 GinIndex
class,也许有一种方法可以创建这样的索引而无需执行 raw SQL?
这是一个模型class:
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 ...
查询是最好的方式?
还没有机会将我的旧手册 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
语句。
在 Django 中,从版本 1.11 开始我们有一个 class for PostgreSQL GinIndex
(https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/)。我想创建一个迁移,在我添加到我的一个表中的 VectorSearchField
上构建这样的索引。到目前为止,我尝试简单地将 db_index=True
添加到 VectorSearchField
,但是失败了,因为它试图创建一个 B-Tree 索引(我认为)并且 VectorSearchField
值是太长了。
我设法通过 运行 一个 migrations.RunSQL()
迁移创建了我想要的索引:
CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
但是,我想,由于 Django 中有一个特殊的 GinIndex
class,也许有一种方法可以创建这样的索引而无需执行 raw SQL?
这是一个模型class:
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 ...
查询是最好的方式?
还没有机会将我的旧手册 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
语句。