简体   繁体   English

使用 icontains 的 Django SearchVector

[英]Django SearchVector using icontains

I am trying to search for a list of values in multiple columns in postgres (via django).我正在尝试在 postgres 的多个列中搜索值列表(通过 django)。 I was able to use SearchQuery and SearchVector and this works great if one of the search values matches a full word.我能够使用 SearchQuery 和 SearchVector,如果其中一个搜索值匹配一个完整的单词,这将非常有用。 I was hoping to use icontains so that partial strings could also be used in the search.我希望使用 icontains 以便在搜索中也可以使用部分字符串。 Is this possible and if so could someone point me in the right direction.这可能吗,如果可以的话,有人可以指出我正确的方向。 Here is an example of my approach below.下面是我的方法的一个示例。

Example Data:示例数据:

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

This would return the Hulk record but I am hoping I can somehow use like 'icontains' so that when searching for 'man' the Batman record would also be returned.这将返回 Hulk 记录,但我希望我能以某种方式使用“icontains”,以便在搜索“man”时也会返回蝙蝠侠记录。 Any help is appreciated!任何帮助表示赞赏!

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

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

So SearchQuery and SearchVector are a part of Django's Full Text searching functionality and it doesnt look like you can achieve what I was wanting to do with these functions.所以 SearchQuery 和 SearchVector 是 Django 全文搜索功能的一部分,看起来你不能用这些功能实现我想要做的事情。 I have taken a different approach thanks to Julian Phalip's approach here.. https://www.julienphalip.com/blog/adding-search-to-a-django-site-in-a-snap/由于 Julian Phalip 在这里的方法,我采取了不同的方法。 https://www.julienphalip.com/blog/adding-search-to-a-django-site-in-a-snap/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM