微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django SearchVector 不适用于包含空格的搜索查询

如何解决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 []>
>>>

解决方法

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

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

没有图标? 在 doc 中,我没有看到带有 search__icontains 的示例。

另一种选择是使用 SearchQuery :

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。