【问题标题】:Django full text search with PostgreSQL, across multiple different models使用 PostgreSQL 进行 Django 全文搜索,跨多个不同模型
【发布时间】:2020-08-22 07:47:07
【问题描述】:

我需要跨多个不同模型执行 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()

【问题讨论】:

    标签: django postgresql full-text-search


    【解决方案1】:

    您可以使用这样的方式将多个查询集组合成一个。

    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)
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2013-03-31
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2020-12-14
      • 2012-11-08
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多