如何使用Postgres在Django中创建case insensetive searcn



我有一个Django、Django REST框架和PostgreSQL的项目。我的目标是在特定条件下进行搜索:

  • 逻辑运算符(AND、OR、NOT(
  • 不区分大小写
  • *这样的运算符通过前缀进行搜索。som*->搜索一些,索马里等等

我的第一次尝试是使用这种类型的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

逻辑运算符有效,按前缀搜索适用于:*,但我不知道如何使其不区分大小写。

是否可以使这种类型的搜索不区分大小写?或者可能还有其他选择?

请尝试:

SearchQuery(q,search_type='aw',config='english'(

SearchQuery(q,config='pg_control.simple',search_type='aw'(

本文包含有关Django中搜索的更多详细信息https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/search/

最新更新