我使用 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
逻辑运算符起作用,使用:*
前缀搜索也可以正常工作,但我不知道如何使其不区分大小写。
这种搜索方式是否可以不区分大小写呢?或者还有其他选项吗?