使用 Django Postgres 的内置全文搜索通过特定列进行全文搜索



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

能够通过简单地过滤来实现这一点

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

最新更新