Me gustaría implementar una función de búsqueda en una aplicación de blog de django. El status quo es que tengo una lista de cadenas suministradas por el usuario y el conjunto de consultas se reduce por cada cadena para incluir solo aquellos objetos que coinciden con la cadena.¿Cómo implementar la búsqueda de texto completo en Django?
Ver:
if request.method == "POST":
form = SearchForm(request.POST)
if form.is_valid():
posts = Post.objects.all()
for string in form.cleaned_data['query'].split():
posts = posts.filter(
Q(title__icontains=string) |
Q(text__icontains=string) |
Q(tags__name__exact=string)
)
return archive_index(request, queryset=posts, date_field='date')
Ahora bien, ¿y si yo no quería hacer concatenar cada palabra que se busca por un AND lógico, pero con un OR lógico? ¿Como podría hacerlo? ¿Hay alguna manera de hacerlo con los propios métodos Queryset de Django o uno tiene que recurrir a consultas SQL sin formato?
En general, ¿es una solución adecuada para hacer búsquedas de texto completo como esta o recomendaría utilizar un motor de búsqueda como Solr, Whoosh o Xapian? ¿Cuáles son sus beneficios?
Debería estar usando O si desea una búsqueda de texto completo. Su código es claro, pero la descripción es un poco confusa. –
Pero las declaraciones .filter() están AND 'juntas, ¿no es así? Por lo tanto, cada argumento de búsqueda (palabra) se busca en el título de la publicación O en el contenido O en las etiquetas relacionadas. Pero para aparecer como resultado, una publicación debe tener todos los argumentos de búsqueda en su título OR contenido O etiqueta. Eso está bien y es exactamente lo que quería lograr. Solo tengo curiosidad sobre cómo implementar que un resultado necesita solo una de las palabras para estar presente en uno de sus atributos (no en todos). – jnns