def search(request): '''View for a simple keyword search on TEI Groupsheet content only.''' form = KeywordSearchForm(request.GET) context = {'form': form, 'page_rdf_type': 'schema:SearchResultsPage'} if form.is_valid(): keywords = form.cleaned_data['keywords'] # pagination todo (?) # page = request.REQUEST.get('page', 1) try: results = TeiGroupSheet.objects \ .filter(fulltext_terms=keywords) \ .order_by('-fulltext_score') \ .also('fulltext_score') context.update({'documents': results, 'keywords': keywords}) # calculate total to trigger exist query so error can be caught results.count() except ExistDBException as err: logger.error('eXist query error: %s', err) context['query_error'] = True return render(request, 'groupsheets/search_results.html', context)
def test_keyword_clean(self): term_phrase = 'term1 term2 "exact phrase"' form = KeywordSearchForm({'keywords': term_phrase}) self.assertTrue(form.is_valid()) self.assertEqual(term_phrase, form.cleaned_data['keywords']) # wildcards are fine term_phrase = 'term?1 term* "exact phrase"' form = KeywordSearchForm({'keywords': term_phrase}) self.assertTrue(form.is_valid()) self.assertEqual(term_phrase, form.cleaned_data['keywords']) # for an incomplete exact phrase, the quote will be ignored incomplete_phrase = 'term1 term2 "exact phrase' form = KeywordSearchForm({'keywords': incomplete_phrase}) self.assertTrue(form.is_valid()) self.assertEqual(incomplete_phrase.replace('"', ''), form.cleaned_data['keywords']) # works with multiple phrases or terms incomplete_phrase = 'term1 term2 "exact phrase1" term3 "inexact phrase' cleaned_incomplete_phrase = 'term1 term2 "exact phrase1" term3 inexact phrase' form = KeywordSearchForm({'keywords': incomplete_phrase}) self.assertTrue(form.is_valid()) self.assertEqual(cleaned_incomplete_phrase, form.cleaned_data['keywords'])