我想在我的数据库上使用全文搜索,并选择要搜索的列。当我只在我的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中搜索水果列,或者我是否必须为每列设置单独的搜索向量?
答案 0 :(得分:1)
能够通过简单过滤
来实现这一目标result = Food.objects.filter(**{fruits + "__search": "apple"})