【问题标题】:Django SearchVector doesn't work with search query containing whitespaceDjango SearchVector 不适用于包含空格的搜索查询
【发布时间】:2021-05-27 13:27:19
【问题描述】:

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

【问题讨论】:

  • 回答了类似的问题here

标签: python django django-orm django-3 django-searchvector


【解决方案1】:

如果你尝试会有什么结果:

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))

【讨论】:

  • 这行得通,实际上他们两个都行。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多