我正在尝试通过搜索多个字段来获取搜索结果。如果我使用django.db.models.Q-它可以正常工作。但是,如果我使用django.contrib.postgres.search.SearchVector,则会得到错误的结果。
我的requirements.txt文件:
django==2.2.0
psycopg2==2.8
models.py文件的相关部分:
class Post(models.Model):
title = models.CharField(max_length=250)
body = models.TextField()
我的代码:
>>> from blog.models import Post
>>> from django.db.models import Q
>>> from django.contrib.postgres.search import SearchVector
>>> Post.objects.filter(Q(title__icontains='is') | Q(body__icontains='is')).count()
10
>>> Post.objects.annotate(search=SearchVector('title','body')).filter(search='is').count()
0
我不明白为什么SearchVector没得到结果。
尝试这样做:
>>> Post.objects.annotate(search=SearchVector('title', 'body')).filter(search__icontains='is').count()
6
更好,但仍然小于Q。