我需要在多个不同的模型上执行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()
2条答案
按热度按时间iklwldmw1#
你可以用类似这样的方法将多个查询集合并成一个。
uqxowvwt2#
使用QuerySet.union操作符,只要查询的结果
SELECT
使用相同的类型,就可以合并来自不同模型的QuerySets。这篇博客文章的作者有一个使用
SearchRank
和SearchQuery
的简洁示例。请注意,这在每个模型('pk', 'type', 'rank')
上使用相同的值,以便.union()
工作。type
注解通知返回的模型这允许你在数据库端而不是Django中进行排序,限制甚至进一步过滤。
来自文章的查询:
文章的结果: