首页 > 解决方案 > Django SearchVector 不适用于包含空格的搜索查询

问题描述

我有一个name我试图用 SearchVector 注释的字段。如果我不在搜索字符串中添加空格但如果我添加空格则返回空列表,它工作正常。相同的字符串适用于常规filter查询集。

>>> r = Resource.objects.filter(name__icontains='LAKSHMI NURSING')
>>> r
<QuerySet [<Resource: LAKSHMI NURSING HOME>]>
>>>

使用不带空格字符串的搜索向量

>>> r = Resource.objects.annotate(
...             search=SearchVector('name', 'type')
...             ).filter(search__icontains='LAKSHMI')
>>> r
<QuerySet [<Resource: LAKSHMI NURSING HOME>]>
>>>

使用空白:

>>> r = Resource.objects.annotate(
...             search=SearchVector('name', 'type')
...             ).filter(search__icontains='LAKSHMI NURSING')
>>> r
<QuerySet []>
>>>

标签: pythondjangodjango-ormdjango-3django-searchvector

解决方案


如果您尝试,结果是什么:

r = Resource.objects.annotate(
...             search=SearchVector('name', 'type')
...             ).filter(search='LAKSHMI NURSING')

没有图标?在文档中,我没有看到带有search__icontains.

另一种选择可能是使用SearchQuery

    from django.contrib.postgres.search import SearchVector, SearchQuery
    queryset = queryset.annotate(
        search=SearchVector(*args)
    ).filter(search=SearchQuery(search_text))

推荐阅读