def search(request, slug): forum = get_object_or_404(Forum, slug=slug) try: try: from sphinxapi import SphinxClient, SPH_MATCH_EXTENDED, SPH_SORT_RELEVANCE except ImportError: raise SearchUnavailable() term = request.GET.get('term', '').encode('utf-8') if term: sphinx = SphinxClient() sphinx.SetServer(settings.CICERO_SPHINX_SERVER, settings.CICERO_SPHINX_PORT) sphinx.SetMatchMode(SPH_MATCH_EXTENDED) sphinx.SetSortMode(SPH_SORT_RELEVANCE) sphinx.SetFilter('gid', [forum.id]) paginator = Paginator(SphinxObjectList(sphinx, term), settings.CICERO_PAGINATE_BY) try: page = paginator.page(request.GET.get('page', '1')) except InvalidPage: raise Http404 else: paginator = Paginator([], 1) page = paginator.page(1) return response(request, 'cicero/search.html', { 'page_id': 'search', 'forum': forum, 'term': term, 'paginator': paginator, 'page_obj': page, 'query_dict': request.GET, }) except SearchUnavailable: raise return response(request, 'cicero/search_unavailable.html', {})
def search(request): from sphinxapi import SphinxClient, SPH_MATCH_EXTENDED, SPH_SORT_RELEVANCE term = request.GET.get('term', '') category = None args = [u'term=%s'%term] template_name = 'board/search.html' if term: sphinx = SphinxClient() sphinx.SetServer(settings.SPHINX_SERVER, settings.SPHINX_PORT) sphinx.SetMatchMode(SPH_MATCH_EXTENDED) sphinx.SetSortMode(SPH_SORT_RELEVANCE) cid = request.GET.get('c') if cid: try: cid = int(cid) except TypeError: raise Http404 category = get_object_or_404(Category, cid) if category: sphinx.SetFilter('category_id', [category]) args.append(u'c=%s'%cid) user_settings = get_user_settings(request.user) try: page = int(request.GET.get('page', '1')) if page < 1: raise Http404 except ValueError: raise Http404 #sphinx.SetLimits(page * user_settings.ppp, user_settings.ppp) if request.GET.get('adv_submit.x'): template_name='board/advanced_search.html' u = User.objects.filter(username=term) if u: q = QuerySetPaginator(Post.objects.filter(user=u), user_settings.ppp) else: q = Paginator([], 1).page(1) else: result = sphinx.Query(u'@@relaxed %s'%term) if not result.has_key('total_found'): template_name = 'board/search_unavailable.html' pages = result.get('total_found', 0) / user_settings.ppp if pages > 0 and page > pages: raise Http404 ids = [m['id'] for m in result.get('matches', [])] q = QuerySetPaginator(Post.view_manager.filter(id__in=ids), user_settings.ppp) q = get_page(request.GET.get('page', 1), q) else: q = Paginator([], 1).page(1) return render_to_response(template_name, { 'result': q, 'term': term, 'category': category, 'args': u'&'.join(['']+args), }, context_instance=RequestContext(request, processors=extra_processors))
def SetSortMode(self, mode, clause=''): if mode in self.sort_mode_options: sort_mode = self.sort_mode_options[mode] else: sort_mode = (mode, clause) SphinxClient.SetSortMode(self, *sort_mode)