全文使用django postgres的内置全文搜索

时间:2017-07-05 18:57:08

标签: django postgresql search full-text-search

我想在我的数据库上使用全文搜索,并选择要搜索的列。当我只在我的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中搜索水果列,或者我是否必须为每列设置单独的搜索向量?

1 个答案:

答案 0 :(得分:1)

能够通过简单过滤

来实现这一目标
result = Food.objects.filter(**{fruits + "__search": "apple"})