Как искать по нескольким таблицам с помощью полнотекстового поиска Postgres и индекса GIN в Django
models.py
from django.contrib.postgres.indexes import GinIndex
from django.db import models
from django.contrib.postgres.search import SearchVectorField
class FilmTag(models.Model):
name = models.CharField(max_length=255)
class Film(models.Model):
film_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
tags = models.ManyToManyField(FilmTag, null=True, blank=True)
vector_column = SearchVectorField(null=True) # new field
def __str__(self):
return ', '.join(['film_id=' + str(self.film_id), 'title=' + self.title, 'description=' + self.description])
class Meta:
indexes = (GinIndex(fields=["vector_column"]),) # add index
0002_миграция
# Generated by Django 5.0.4 on 2024-04-03 19:41
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("app", "0002_film_vector_column_film_app_film_vector__2213d6_gin"),
]
operations = [
migrations.RunSQL(
sql='''
CREATE TRIGGER vector_column_trigger
BEFORE INSERT OR UPDATE OF title, description, vector_column
ON app_film
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(
vector_column, 'pg_catalog.english', title, description
);
UPDATE app_film SET vector_column = NULL;
''',
reverse_sql='''
DROP TRIGGER IF EXISTS vector_column_trigger
ON film;
'''
),
]
Я хотел бы также искать по тегам, используя Postgres Full Text Search, так что если я введу "комедия", он выдаст соответствующие фильмы. Как я могу реализовать это? В настоящее время поиск ограничивается текстом и описанием фильма. Буду признателен, если вы дадите ссылки на соответствующие ресурсы или учебники. Спасибо