2012-05-13 2 views
0

J'ai une boîte de saisie semi-automatique qui doit renvoyer des résultats ayant des mots d'entrée. Cependant, les mots d'entrée peuvent être partiels et situés dans un ordre ou des lieux différents.Rechercher une colonne pour plusieurs mots en utilisant le jeu de queues Django

Exemple:

Les valeurs dans la colonne de base de données (MySQL) -

Expected quarterly sales 
Sales preceding quarter 
Profit preceding quarter 
Sales 12 months 

Maintenant, si les types d'utilisateurs quarter sales alors il devrait revenir à la fois des deux premiers résultats.

J'ai essayé:

column__icontains = term #searches only '%quarter sales% and thus gives no results 
column__search = term #searches any of complete words and also returns last result 
**{'ratio_name__icontains':each_term for each_term in term.split()} #this searches only sales as it is the last keyword argument 

Toute astuce via regex ou peut-être quelque chose que je suis absent de Django intégré puisque c'est un modèle commun?

+1

Peut-être que je me trompe, mais cela ressemble plus à un problème de recherche de texte intégral pour moi. Vous devriez jeter un oeil à la recherche en texte intégral MySQL et voir si elle correspond à vos besoins. –

+1

Avez-vous essayé d'utiliser un moteur de recherche? Vérifiez la meule de foin (http://haystacksearch.org/). Il supporte whoosh qui est très facile à utiliser au début, et bien plus encore – szaman

+0

Salut Manoj, j'ai essayé la recherche en texte intégral mais elle renvoie des résultats qui ont TOUS les mots ci-dessus. Exemple, il renvoie également Sales 12 mois (ce qui ne devrait pas). – Pratyush

Répondre

4

Les moteurs de recherche sont meilleurs pour cette tâche, mais vous pouvez toujours le faire avec du code de base. Si vous êtes à la recherche de chaînes contenant « A » et « B », vous pouvez

Model.objects.filter(string__contains='A').filter(string__contains='B') 

ou

Model.objects.filter(Q(string__contains='A') & Q(string__contains='B')) 

Mais vraiment, vous feriez mieux d'aller avec un moteur de recherche simple texte intégral avec peu de configuration, comme Haystack/Whoosh

Questions connexes