2017-07-05 2 views
1

Je souhaite utiliser la recherche en texte intégral dans ma base de données et choisir les colonnes à rechercher. Existe-t-il un moyen de rechercher dans une colonne spécifique (comme les fruits uniquement) lorsque j'ai seulement un champ search_vector dans mon modèle Food qui contient toutes les colonnes (fruits, légumes, produits laitiers). J'aimerais aussi parcourir toutes les colonnes, c'est pourquoi j'ai combiné tous les vecteurs de recherche.Recherche plein texte dans une colonne spécifique à l'aide de la recherche intégrée de django postgres

J'utilise Django 1.11

Voici mon modèle:

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) 

Voilà comment je stocker les vecteurs:

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']) 

Voilà comment je recherche:

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

Y a-t-il un w facile Est-ce que je peux seulement chercher dans la colonne des fruits dans le search_vector que j'ai mis en place, ou est-ce que je devrais mettre en place un vecteur de recherche séparé pour chaque colonne?

Répondre

1

a été en mesure d'accomplir ceci en filtrant simplement

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