python - 使用 icontains 的 Django SearchVector

标签 python django postgresql

我正在尝试在 postgres 的多个列中搜索值列表(通过 django)。我能够使用 SearchQuery 和 SearchVector,如果其中一个搜索值与一个完整的词匹配,这会很好用。我希望使用 icontains 以便在搜索中也可以使用部分字符串。这可能吗?如果可以的话,有人可以指出我正确的方向吗?以下是我的方法示例。

示例数据:

Superhero.objects.create(
    superhero='Batman',
    publisher='DC Comics', 
    alter_ego='Bruce Wayne',
)
Superhero.objects.create(
    superhero='Hulk',
    publisher='Marvel Comics',
    alter_ego='Bruce Banner',
)

Django 过滤器:

from django.contrib.postgres.search import SearchQuery, SearchVector

query = SearchQuery('man') | SearchQuery('Bruce') 
vector = SearchVector('superhero', 'alter_ego', 'publisher')
queryset = queryset.annotate(search=vector).filter(search=query)

这将返回绿巨人记录,但我希望我可以以某种方式使用像“图标”这样在搜索“人”时也会返回 bat 侠记录。感谢您的帮助!

最佳答案

您可以将 icontains 应用于过滤器,例如:

queryset = queryset.annotate(search=vector).filter(search__icontains=query)

关于python - 使用 icontains 的 Django SearchVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49867384/

相关文章:

django - Django QueryDict将值包装在列表中的解决方法?

带有运算符 ANY 的 Postgresql 准备语句

python - 不确定为什么我的存储过程不能在 pyodbc 和 SQL Server 之间工作

python - Django:没有名为设置的模块

python - Daphne,安装 django channel 时出现扭曲的 pip 错误

PostgreSQL 无法识别 STRAIGHT_JOIN

r - 与 PostgreSQL 外部表的连接

python - 当 URL 存在时,与 Django 进行 NoReverseMatch

Python - 写入标准输入的子进程,以便主程序可以从标准输入读取它

python - 在 python 中使用 csv.DictWriter 写入 csv 时添加列(带有值)