这是必须搜索的模型:
class BlockQuote(models.Model):
debate = models.ForeignKey(Debate, related_name='quotes')
speaker = models.ForeignKey(Speaker, related_name='quotes')
text = models.TextField()
我的笔记本电脑上的数据库上有大约一千个实例(生产服务器上大约有50000个)
我正在创建一个'manage.py'函数,它将搜索数据库并返回其textfield包含关键字的所有'BlockQuote'对象。
我正在使用Django的(1.11)Postgres搜索选项来使用'rank'属性,这听起来像是派上用场的东西。 I used the official Django fulltext-search documentation for the code below
然而,当我运行此代码时,它与所有对象匹配,无论BlockQuote.text实际上是否包含查询字段。
def handle(self, *args, **options):
vector = SearchVector('text')
query = options['query'][0]
Search_Instance = Search_Instance.objects.create(query=query)
set = BlockQuote.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')
for result in set:
match = QueryMatch.objects.create(quote=result, query=Search_Instance)
match.save()
有没有人知道我做错了什么?
答案 0 :(得分:2)
我没有看到你真正过滤过。
BlockQuote.objects.annotate(...).filter(rank__gte=0.5)