【发布时间】:2019-08-16 11:23:09
【问题描述】:
我有两个型号Item 和Owner:
class Item(models.Model):
name = models.CharField(max_length=255)
owner = models.ForeignKey(
Owner, related_name='owner_items',
on_delete=models.CASCADE,
)
is_featured = models.BooleanField(
choices=CHOICES, default=BOOL_NO
)
# ...
我在项目名称和描述字段中进行全文搜索(基于 Django 文档)。 PostgreSQL 版本是 10。
search_vectors = (
SearchVector('name', weight='A', config='english') +
SearchVector('description', weight='B', config='english')
)
terms = [SearchQuery(term) for term in keyword.split()]
search_query = functools.reduce(operator.or_, terms)
search_rank = SearchRank(
search_vectors, search_query, weights=[0.2, 0.4, 0.6, 1]
)
qs = Item.objects.all().annotate(
rank=search_rank
).filter(rank__gte=0.2).order_by('-rank')
我还想在方程式中引入Owner、name 字段,如果is_featured 是true,也可以稍微提升排名。
在进行此搜索之前,我有 Owner 实例模型。
【问题讨论】:
-
如果我的回答解决了你的问题,请接受!
标签: python django postgresql full-text-search django-queryset