postgresql 如何使用Django在Postgres全文搜索中使逻辑AND,NOT正常工作

mmvthczy  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(205)

我和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和按前缀搜索运行良好。
但是,当我尝试在NOT(!)上使用AND(&)时,它给出的结果没有逻辑AND,或者对于这样的查询只有syntax error in tsquery: "word !not"

http://127.0.0.1:8000/search_var/?query=word !not

那么,如何使AND和NOT正确工作呢?

qvsjd97n

qvsjd97n1#

添加另一个查询到url
例如:

?word_status=True

或者,您可以使用'or'、'and'并获取此值,以便将其应用于您的查询(取决于它)

相关问题