如何在Django和Postgres中进行不区分大小写的搜索

4

我使用 Django、Django REST 框架和 PostgreSQL 开发了一个项目。

我的目标是对特定条件进行搜索,包括:

  • 逻辑操作符(AND、OR、NOT)
  • 大小写不敏感
  • 类似 * 这样的操作符可以通过前缀进行搜索。例如:som* -> 搜索some、somali等

第一次尝试时,我使用了 Postgres 的全文搜索函数,search_type参数设置为 'websearch'。

这一切看起来都很好,但不支持 * 操作符。因此,我切换到了原始类型搜索,并修改了我的搜索类。

class DataSearch(generics.ListAPIView):
    serializer_class = DataSerializer
    
    def get_queryset(self):
        q = self.request.query_params.get('query')
        
        if q:
            vector = SearchVector('research', 'data', 'research__name')
            query = SearchQuery(q, search_type='raw')
            queryset = Data.objects.annotate(search=vector).filter(search=query)
        else:
            queryset = Data.objects.none()
        return queryset

逻辑运算符起作用,使用:*前缀搜索也可以正常工作,但我不知道如何使其不区分大小写。

这种搜索方式是否可以不区分大小写呢?或者还有其他选项吗?

2个回答

1
请尝试:
SearchQuery(q, search_type='raw', config='english')
或者
SearchQuery(q, config='pg_catalog.simple', search_type='raw')

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接