/ / Jak stworzyć indeks GIN w migracji Django - django, postgresql, indexing, migracja, django-migrations

Jak utworzyć indeks GIN w migracji Django - django, postgresql, indexing, migracja, django-migrations

W Django od wersji 1.11 mamy klasę dla PostgreSQL GinIndex (https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/). Chciałbym utworzyć migrację, która tworzy taki indeks na VectorSearchField Dodałem do jednego z moich stołów. Do tej pory próbowałem po prostu dodać db_index=True do VectorSearchField, ale to się nie udaje, ponieważ próbuje utworzyć indeks B-drzewa (myślę) i VectorSearchField wartości są zbyt długie.

Udało mi się utworzyć indeks, który chcę, uruchamiając migrations.RunSQL() migracja za pomocą:

CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);

Jednak myślę, że jest wyjątkowy GinIndex klasa w Django, może istnieje sposób na stworzenie takiego indeksu bez wykonywania surowego SQL?

Oto klasa modelu:

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.

Każdy pomysł, jak poprawnie utworzyć indeks dla sv pole w migracji? Lub wykonuje polecenie CREATE INDEX ... zapytać w najlepszy sposób?

Odpowiedzi:

10 dla odpowiedzi № 1

Haven nie miał jeszcze szansy na przeniesienie mojego starego podręcznika CREATE INDEX do nowego systemu wprowadzonego w wersji 1.11, ale moje zrozumienie

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"])]

Jest to wymagane, nie trzeba już używać instrukcji SQL CREATE INDEX