djangorest框架中的高级搜索

问题描述 投票:0回答:1

我有一个数据库,其中包含大量带有多个字段(标题、内容、标签)的帖子。我想建立一个搜索系统来查找帖子。乍一看似乎很容易,但事实证明并非如此。例如,当我输入“如何”时,我希望我的系统显示至少包含一个单词的帖子(“如何”或“到”或“如何”是最好的场景),但问题是当我输入“如何”时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)

我尝试了上面提供的代码,但它根本不起作用

django search django-rest-framework full-text-search search-engine
1个回答
0
投票

对于

"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())))
© www.soinside.com 2019 - 2024. All rights reserved.