X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/cad95a5f21346628d1dffa3b50ffa8f38baa5972..d2b0cc75d0835ad5384bec638fea6ea244eadb40:/src/search/views.py diff --git a/src/search/views.py b/src/search/views.py index 6cb6bc53e..4d792e439 100644 --- a/src/search/views.py +++ b/src/search/views.py @@ -1,11 +1,9 @@ -# -*- coding: utf-8 -*- # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.conf import settings from django.http.response import HttpResponseRedirect -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.views.decorators import cache from django.http import HttpResponse, JsonResponse @@ -27,7 +25,7 @@ def match_word_re(word): return "[[:<:]]%s[[:>:]]" % word -query_syntax_chars = re.compile(r"[\\/*:(){}]") +query_syntax_chars = re.compile(r"[\\/*:(){}?.[\]+]") def remove_query_syntax_chars(query, replace=' '): @@ -94,7 +92,7 @@ def hint(request): 'id': b.id, 'url': b.get_absolute_url() } - for b in Book.objects.filter(title__iregex='\m' + prefix)[:limit-len(data)] + for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)] ] callback = request.GET.get('callback', None) if callback: @@ -108,42 +106,42 @@ def hint(request): def main(request): query = request.GET.get('q', '') if len(query) < 2: - return render_to_response( - 'catalogue/search_too_short.html', {'prefix': query}, - context_instance=RequestContext(request)) + return render( + request, 'catalogue/search_too_short.html', + {'prefix': query}) elif len(query) > 256: - return render_to_response( - 'catalogue/search_too_long.html', {'prefix': query}, context_instance=RequestContext(request)) + return render( + request, 'catalogue/search_too_long.html', + {'prefix': query}) query = prepare_query(query) pd_authors = search_pd_authors(query) books = search_books(query) pictures = search_pictures(query) - suggestion = u'' + suggestion = '' if not (books or pictures or pd_authors): form = PublishingSuggestForm(initial={"books": query + ", "}) - return render_to_response( + return render( + request, 'catalogue/search_no_hits.html', { 'form': form, 'did_you_mean': suggestion - }, - context_instance=RequestContext(request)) + }) if not (books or pictures) and len(pd_authors) == 1: return HttpResponseRedirect(pd_authors[0].get_absolute_url()) - return render_to_response( + return render( + request, 'catalogue/search_multiple_hits.html', { 'pd_authors': pd_authors, 'books': books, 'pictures': pictures, 'did_you_mean': suggestion - }, - context_instance=RequestContext(request)) - + }) def search_books(query): search = Search() @@ -151,10 +149,10 @@ def search_books(query): search_fields = [] words = query.split() fieldsets = ( - (['authors'], True), - (['title'], True), - (['metadata'], True), - (['text', 'themes_pl'], False), + (['authors', 'authors_nonstem'], True), + (['title', 'title_nonstem'], True), + (['metadata', 'metadata_nonstem'], True), + (['text', 'text_nonstem', 'themes_pl', 'themes_pl_nonstem'], False), ) for fields, is_book in fieldsets: search_fields += fields @@ -191,10 +189,10 @@ def search_pictures(query): search_fields = [] words = query.split() fieldsets = ( - (['authors'], True), - (['title'], True), - (['metadata'], True), - (['themes_pl'], False), + (['authors', 'authors_nonstem'], True), + (['title', 'title_nonstem'], True), + (['metadata', 'metadata_nonstem'], True), + (['themes_pl', 'themes_pl_nonstem'], False), ) for fields, is_book in fieldsets: search_fields += fields