【问题标题】:Django SearchVector using icontains使用 icontains 的 Django SearchVector
【发布时间】:2018-09-26 18:54:26
【问题描述】:

我正在尝试在 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')
    self.queryset = self.queryset.annotate(search=vector).filter(search=query)

这将返回 Hulk 记录,但我希望我能以某种方式使用“icontains”,以便在搜索“man”时也会返回蝙蝠侠记录。任何帮助表示赞赏!

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      所以 SearchQuery 和 SearchVector 是 Django 全文搜索功能的一部分,看起来你不能用这些功能实现我想要做的事情。感谢 Julian Phalip 的方法,我采取了不同的方法。https://www.julienphalip.com/blog/adding-search-to-a-django-site-in-a-snap/

      【讨论】:

        猜你喜欢
        • 2019-05-01
        • 2018-12-04
        • 2019-05-21
        • 1970-01-01
        • 2013-02-09
        • 1970-01-01
        • 2020-02-01
        • 2021-12-25
        • 2018-04-24
        相关资源
        最近更新 更多