Расширенный поиск в фреймворке django rest
У меня есть база данных, содержащая множество постов с несколькими полями (название, содержание, теги). Я хочу создать поисковую систему для поиска постов. Сначала казалось, что это очень просто, но оказалось, что это не так. Например, когда я набираю 'how to', я хочу, чтобы система показывала посты, содержащие хотя бы одно из слов ('how' или 'to' или 'how to' - лучший сценарий), но проблема в том, что когда я набираю 'how 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())))