Jim*_*oyo 9 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")
Run Code Online (Sandbox Code Playgroud)
Django过滤器:
from django.contrib.postgres.search import SearchQuery, SearchVector
query = SearchQuery('man') | SearchQuery('Bruce')
vector = SearchVector('superhero', 'alter_ego', 'publisher')
self.queryset = self.queryset.annotate(search=vector).filter(search=query)
Run Code Online (Sandbox Code Playgroud)
这将返回绿巨人记录,但我希望我能以某种方式使用像“icontains”这样的东西,这样在搜索“人”时,蝙蝠侠记录也会被返回。任何帮助表示赞赏!
您可以icontains像这样应用过滤器:
queryset = queryset.annotate(search=vector).filter(search__icontains=query)
Run Code Online (Sandbox Code Playgroud)
所以 SearchQuery 和 SearchVector 是 Django 全文搜索功能的一部分,看起来你无法实现我想要用这些功能做的事情。感谢 Julian Phalip 的方法,我采取了不同的方法。https://www.julienphalip.com/blog/adding-search-to-a-django-site-in-a-snap/
| 归档时间: |
|
| 查看次数: |
3848 次 |
| 最近记录: |