Django полнотекстовый поиск с PostgreSQL в нескольких разных моделях - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно выполнить FTS для нескольких разных моделей. Я хочу, чтобы в результатах поиска отображалась модель любого типа.

Я хочу отсортировать результаты по рангу, чтобы получить наиболее релевантный результат. Я могу выполнять поиск один за другим, но не знаю, как объединить результаты, особенно с сохранением релевантности ранга.

Вот модели, это пример из справочной страницы «Создание запросов».

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()


class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()


class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField()
    number_of_pingbacks = models.IntegerField()
    rating = models.IntegerField()

1 Ответ

0 голосов
/ 07 мая 2020

Вы можете объединить несколько наборов запросов в один примерно так.

from itertools import chain

blogs = Blog.objects.filter(...)
authors = Author.objects.filter(...)
entries = Entry.objects.search(...)

chain = chain(blog_results, lesson_results, profile_results)
qs = sorted(chain, key=lambda instance: instance.pk, reverse=True)
...