Как заставить логические И, НЕ работать правильно в полнотекстовом поиске Postgres с помощью Django
У меня есть проект с Django, DRF и PostgreSQL. И мне нужно сделать поиск некоторых данных в этом проекте. В этом поиске мне нужны логические операторы (AND, OR, NOT), поиск по префиксу (например, manch*) и нечувствительность к регистру. Поэтому я решил использовать полнотекстовый поиск PostgreSQL следующим образом
class VariableSearch(generics.ListAPIView):
serializer_class = VariableSerializer
def get_queryset(self):
q = self.request.query_params.get('query')
if q:
vector = SearchVector('name', 'label')
query = SearchQuery(q, search_type='raw')
queryset = Variable.objects.annotate(search=vector).filter(search=query)
else:
queryset = Variable.objects.none()
return queryset
Итак, с помощью этого типа поиска я могу делать такие запросы
http://127.0.0.1:8000/search_var/?query=полит:* | инфо:*
Оператор OR и поиск по префиксу работают хорошо.
Но когда я пытаюсь использовать AND (&) на NOT (!), это дает мне результаты без этого логического AND или просто syntax error in tsquery: "word !not"
для запросов, подобных этому
http://127.0.0.1:8000/search_var/?query=word !not
Итак, как сделать так, чтобы И и НЕ работали правильно?
добавьте еще один запрос к url
пример:
?word_status=True
Или вы можете использовать 'or', 'and' и получить это значение, чтобы применить его к вашему запросу (в зависимости от него).