Django SearchVector 不适用于包含空格的搜索查询
Django SearchVector doesn't work with search query containing whitespace
我有一个 name
字段,我试图在该字段上使用 SearchVector 进行注释。如果我不在搜索字符串中添加 whitespace,它工作正常,但如果我添加 whitespace,则 returns 空列表。
相同的字符串适用于常规 filter
查询集。
>>> r = Resource.objects.filter(name__icontains='LAKSHMI NURSING')
>>> r
<QuerySet [<Resource: LAKSHMI NURSING HOME>]>
>>>
使用没有白色-space 字符串的搜索向量
>>> r = Resource.objects.annotate(
... search=SearchVector('name', 'type')
... ).filter(search__icontains='LAKSHMI')
>>> r
<QuerySet [<Resource: LAKSHMI NURSING HOME>]>
>>>
配白色-space:
>>> 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))
我有一个 name
字段,我试图在该字段上使用 SearchVector 进行注释。如果我不在搜索字符串中添加 whitespace,它工作正常,但如果我添加 whitespace,则 returns 空列表。
相同的字符串适用于常规 filter
查询集。
>>> r = Resource.objects.filter(name__icontains='LAKSHMI NURSING')
>>> r
<QuerySet [<Resource: LAKSHMI NURSING HOME>]>
>>>
使用没有白色-space 字符串的搜索向量
>>> r = Resource.objects.annotate(
... search=SearchVector('name', 'type')
... ).filter(search__icontains='LAKSHMI')
>>> r
<QuerySet [<Resource: LAKSHMI NURSING HOME>]>
>>>
配白色-space:
>>> 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))