Sto implementando una semplice ricerca come sul mio sito Django e quello che attualmente uso è il seguente codice:Django SQL OR tramite filtro() e Q(): dinamico?
from django.db.models import Q
posts = Post.objects.filter(Q(title__icontains=query)|Q(content__icontains=query))
Dove query
è una stringa. Ciò risulta in un'istruzione SQL LIKE
e funziona abbastanza bene. Ora mi piacerebbe anche dividere la mia domanda di ricerca in termini o parole:
words = query.split(' ')
Così words
ora contiene una lista di parole, e mi piacerebbe ottenere un'istruzione SQL simile a:
SELECT ... FROM foo WHERE `title` ILIKE '%word1%' OR `title` ILIKE '%word2%'
OR `content` ILIKE '%word1%' OR `content` ILIKE '%word2%'
E nel caso ci siano più di due parole mi piacerebbe che la dichiarazione crescesse elencando tutte le voci di ogni parola.
Qualche idea? Grazie!
Non dimenticare di disinfettare le tue domande o ti troverai nella stessa situazione in cui si trovava la scuola di Boby Table. –
Cosa ne pensi di usare la ricerca full-text con djapian? – Ski
@the_drow: Django (o più correttamente, DB-API) si occupa già di questo. –