我有一个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/