我有一个数据库,其中包含大量带有多个字段(标题、内容、标签)的帖子。我想建立一个搜索系统来查找帖子。乍一看似乎很容易,但事实证明并非如此。例如,当我输入“如何”时,我希望我的系统显示至少包含一个单词的帖子(“如何”或“到”或“如何”是最好的场景),但问题是当我输入“如何”时to' 我的系统仅搜索包含“how to”而不是“how”或“to”的帖子。请帮助我构建系统。
class PostsSearch(APIView):
def get(self, request, format=None):
search = request.GET.get('search')
query = SearchQuery(search)
vector = SearchVector('title') + SearchVector('tags__name')
posts = Post.objects.prefetch_related('tags').annotate(rank=SearchRank(vector, query)).filter(rank__gte=0.0001).order_by('-rank')
serializer = PostsSerializer(posts, many=True)
return Response(serializer.data)
我尝试了上面提供的代码,但它根本不起作用
对于
"how to"
提到的场景,您可以简单地reduce
搜索单词列表,例如:
from functools import reduce
import operator
from django.db.models import Q
q = "how to"
results = Post.objects.filter(reduce(operator.or_, (Q(content__icontains=k) for k in q.strip().split())))