【问题标题】:Full Text Search through specific column using django postgres's builtin full text search使用内置全文搜索的 django postgres 通过特定列进行全文搜索
【发布时间】:2017-12-09 13:57:54
【问题描述】:

我想在我的数据库上使用全文搜索并选择要搜索的列。当我的 Food 模型中只有一个包含所有列(水果、蔬菜、乳制品)的 search_vector 字段时,有没有办法搜索特定列(比如只有水果)。我还想搜索所有列,这就是我合并所有搜索向量的原因。

我正在使用 Django 1.11

这是我的模型:

class Food(models.Model):
    fruits = models.CharField(max_length=50)
    vegetables = models.CharField(max_length=50)
    dairy = models.CharField(max_length=50)
    search_vector = SearchVectorField(null=True)

这是我存储向量的方式:

vector= SearchVector('fruits', weight='A') + \
        SearchVector('vegetables', weight='B') + \
        SearchVector('dairy', weight='C') + \
Food.objects.annotate(document=vector).values_list('document', flat=True)


for f in Food.objects.annotate(document=vector):
    f.search_vector = f.document
    f.save(update_fields=['search_vector'])

这是我的搜索方式:

search_result = Food.objects\
    .annotate(rank=SearchRank(F('search_vector'), "apple"))\
    .filter(search_vector="apple")\

是否有一种简单的方法可以只在我设置的 search_vector 中的水果列中进行搜索,还是必须为每列设置单独的搜索向量?

【问题讨论】:

    标签: django postgresql search full-text-search


    【解决方案1】:

    通过简单的过滤就能做到这一点

    result = Food.objects.filter(**{fruits + "__search": "apple"})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2012-07-29
      • 2012-04-16
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多