- author_results = filter(ensure_exists, author_results)
- translator_results = filter(ensure_exists, translator_results)
- title_results = filter(ensure_exists, title_results)
- text_phrase = filter(ensure_exists, text_phrase)
- everywhere = filter(ensure_exists, everywhere)
-
- results = author_results + translator_results + title_results + text_phrase + everywhere
- # ensure books do exists & sort them
- for res in (author_results, translator_results, title_results, text_phrase, everywhere):
- res.sort(reverse=True)
-
- # We don't want to redirect to book text, but rather display result page even with one result.
- # if len(results) == 1:
- # fragment_hits = filter(lambda h: 'fragment' in h, results[0].hits)
- # if len(fragment_hits) == 1:
- # #anchor = fragment_hits[0]['fragment']
- # #frag = Fragment.objects.get(anchor=anchor)
- # return HttpResponseRedirect(fragment_hits[0]['fragment'].get_absolute_url())
- # return HttpResponseRedirect(results[0].book.get_absolute_url())
- if len(results) == 0:
- form = PublishingSuggestForm(initial={"books": query + ", "})
- return render_to_response('catalogue/search_no_hits.html',
- {'tags': tags,
- 'prefix': query,
- "form": form,
- 'did_you_mean': suggestion},
- context_instance=RequestContext(request))
-
- return render_to_response('catalogue/search_multiple_hits.html',
- {'tags': tags,
- 'prefix': query,
- 'results': {'author': author_results,
- 'translator': translator_results,
- 'title': title_results,
- 'content': text_phrase,
- 'other': everywhere},
- 'did_you_mean': suggestion},
- context_instance=RequestContext(request))
+ results = [r for r in results if ensure_exists(r)]
+ return results
+
+
+def search_pd_authors(query):
+ pd_authors = Author.objects.filter(name__icontains=query)
+ existing_slugs = Tag.objects.filter(
+ category='author', slug__in=list(pd_authors.values_list('slug', flat=True))) \
+ .values_list('slug', flat=True)
+ pd_authors = pd_authors.exclude(slug__in=existing_slugs)
+ return pd_authors
+
+
+def prepare_query(query):
+ query = ' '.join(query.split())
+ # filter out private use characters
+ import unicodedata
+ query = ''.join(ch for ch in query if unicodedata.category(ch) != 'Co')
+ query = remove_query_syntax_chars(query)
+
+ words = query.split()
+ if len(words) > 10:
+ query = ' '.join(words[:10])
+ return query