Beispiel #1
0
def search(request):
    if not flag_is_active(request, 'elasticsearch'):
        """Google Custom Search results page."""
        query = request.GET.get('q', '')
        return render(request, 'landing/searchresults.html',
                            {'query': query})

    """Performs search or displays the search form."""
    search_query = request.GET.get('q', None)
    page = int(request.GET.get('page', 1))

    # Pagination
    if page < 1:
        page = 1
    page_count = 10
    start = page_count * (page - 1)
    end = start + page_count

    results = DocumentType.search()
    if search_query:
        results = (results.query(or_={'title': search_query,
                                   'content': search_query})
                          .highlight('content'))
    result_count = results.count()
    results = results[start:end]

    return render(request, 'search/results.html', {'results': results,
            'search_query': search_query,
            'result_count': result_count,
            'prev_page': page - 1 if start > 0 else None,
            'next_page': page + 1 if end < result_count else None})
Beispiel #2
0
def search(request):
    if not flag_is_active(request, "elasticsearch"):
        """Google Custom Search results page."""
        query = request.GET.get("q", "")
        return render(request, "landing/searchresults.html", {"query": query})

    """Performs search or displays the search form."""
    search_query = request.GET.get("q", None)
    page = int(request.GET.get("page", 1))

    # Pagination
    if page < 1:
        page = 1
    page_count = 10
    start = page_count * (page - 1)
    end = start + page_count

    results = DocumentType.search()
    if search_query:
        results = results.query(or_={"title": search_query, "content": search_query}).highlight("content")
    result_count = results.count()
    results = results[start:end]

    return render(
        request,
        "search/results.html",
        {
            "results": results,
            "search_query": search_query,
            "result_count": result_count,
            "prev_page": page - 1 if start > 0 else None,
            "next_page": page + 1 if end < result_count else None,
        },
    )
Beispiel #3
0
def search(request):
    if not flag_is_active(request, 'elasticsearch'):
        """Google Custom Search results page."""
        query = request.GET.get('q', '')
        return render(request, 'landing/searchresults.html', {'query': query})
    """Performs search or displays the search form."""
    search_query = request.GET.get('q', None)
    page = int(request.GET.get('page', 1))

    # Pagination
    if page < 1:
        page = 1
    page_count = 10
    start = page_count * (page - 1)
    end = start + page_count

    results = DocumentType.search()
    if search_query:
        results = (results.query(or_={
            'title__text': search_query,
            'content__text': search_query
        }).filter(locale=request.locale).highlight('content'))
    result_count = results.count()
    results = results[start:end]

    return render(
        request, 'search/results.html', {
            'results': results,
            'search_query': search_query,
            'result_count': result_count,
            'prev_page': page - 1 if start > 0 else None,
            'next_page': page + 1 if end < result_count else None
        })
Beispiel #4
0
def search(request):
    if not flag_is_active(request, 'elasticsearch'):
        """Google Custom Search results page."""
        query = request.GET.get('q', '')
        return render(request, 'landing/searchresults.html',
                            {'query': query})

    """Performs search or displays the search form."""
    search_query = request.GET.get('q', None)
    page = int(request.GET.get('page', 1))

    # Pagination
    if page < 1:
        page = 1
    page_count = 10
    start = page_count * (page - 1)
    end = start + page_count

    results = DocumentType.search()
    if search_query:
        query_fields = ['title', 'content', 'summary']
        or_dict = {}
        for field in query_fields:
            or_dict[field + '__text'] = search_query
        results = (results.query(or_=or_dict)
                          .filter(locale=request.locale)
                          .highlight(*DocumentType.excerpt_fields))
    result_count = results.count()
    results = results[start:end]

    return render(request, 'search/results.html', {'results': results,
            'search_query': search_query,
            'result_count': result_count,
            'prev_page': page - 1 if start > 0 else None,
            'next_page': page + 1 if end < result_count else None})
Beispiel #5
0
    def test_get_excerpt_strips_html(self):
        self.refresh()
        results = (DocumentType.search().query(content__match='audio')
                                        .highlight('content'))
        ok_(results.count() > 0)
        for doc in results:
            excerpt = doc.get_excerpt()
            ok_('audio' in excerpt)
            ok_('<strong>' not in excerpt)

        results = (DocumentType.search().query(or_={'title': 'lorem',
                                                    'content': 'lorem'})
                                        .highlight('content'))
        ok_(results.count() > 0)
        for doc in results:
            excerpt = doc.get_excerpt()
            eq_('', excerpt)
Beispiel #6
0
 def test_current_locale_results(self):
     self.refresh()
     results = (DocumentType.search().query(or_={
         'title': 'article',
         'content': 'article'
     }).filter(locale='en-US').highlight('content'))
     for doc in results:
         eq_('en-US', doc.locale)
Beispiel #7
0
 def test_current_locale_results(self):
     self.refresh()
     results = (DocumentType.search().query(or_={'title': 'article',
                                                 'content': 'article'})
                                     .filter(locale='en-US')
                                     .highlight('content'))
     for doc in results:
         eq_('en-US', doc.locale)
Beispiel #8
0
    def test_get_excerpt_strips_html(self):
        self.refresh()
        results = (DocumentType.search().query(
            content__match='audio').highlight('content'))
        ok_(results.count() > 0)
        for doc in results:
            excerpt = doc.get_excerpt()
            ok_('audio' in excerpt)
            ok_('<strong>' not in excerpt)

        results = (DocumentType.search().query(or_={
            'title': 'lorem',
            'content': 'lorem'
        }).highlight('content'))
        ok_(results.count() > 0)
        for doc in results:
            excerpt = doc.get_excerpt()
            eq_('', excerpt)
Beispiel #9
0
 def test_get_excerpt_uses_summary(self):
     self.refresh()
     results = (DocumentType.search().query(
         content__match='audio').highlight('content'))
     ok_(results.count() > 0)
     for doc in results:
         excerpt = doc.get_excerpt()
         ok_('the word for tough things' in excerpt)
         ok_('extra content' not in excerpt)
Beispiel #10
0
 def test_get_excerpt_uses_summary(self):
     self.refresh()
     results = (DocumentType.search().query(content__match='audio')
                                     .highlight('content'))
     ok_(results.count() > 0)
     for doc in results:
         excerpt = doc.get_excerpt()
         ok_('the word for tough things' in excerpt)
         ok_('extra content' not in excerpt)
Beispiel #11
0
    def test_get_excerpt_without_highlight_match(self):
        self.refresh()
        results = (DocumentType.search().query(or_={'title': 'lorem',
                                                    'content': 'lorem'})
                                        .highlight('content'))

        ok_(results.count() > 0)
        for doc in results:
            excerpt = doc.get_excerpt()
            eq_('audio is in this but the word for tough things'
                ' will be ignored'
                , excerpt)
Beispiel #12
0
    def test_get_excerpt_without_highlight_match(self):
        self.refresh()
        results = (DocumentType.search().query(or_={
            'title': 'lorem',
            'content': 'lorem'
        }).highlight('content'))

        ok_(results.count() > 0)
        for doc in results:
            excerpt = doc.get_excerpt()
            eq_(
                'audio is in this but the word for tough things'
                ' will be ignored', excerpt)
Beispiel #13
0
def search(request):
    if not flag_is_active(request, 'elasticsearch'):
        """Google Custom Search results page."""
        query = request.GET.get('q', '')
        return render(request, 'landing/searchresults.html', {'query': query})
    """Performs search or displays the search form."""
    search_query = request.GET.get('q', None)
    page = int(request.GET.get('page', 1))

    # Pagination
    if page < 1:
        page = 1
    page_count = 10
    start = page_count * (page - 1)
    end = start + page_count

    results = DocumentType.search()
    if search_query:
        query_fields = ['title', 'content', 'summary']
        or_dict = {}
        for field in query_fields:
            or_dict[field + '__text'] = search_query
        results = (results.query(or_=or_dict).filter(
            locale=request.locale).highlight(*DocumentType.excerpt_fields))
    result_count = results.count()
    results = results[start:end]

    template = 'results.html'
    if flag_is_active(request, 'redesign'):
        template = 'results-redesign.html'

    return render(
        request, 'search/%s' % template, {
            'results': results,
            'search_query': search_query,
            'result_count': result_count,
            'current_page': page,
            'prev_page': page - 1 if start > 0 else None,
            'next_page': page + 1 if end < result_count else None
        })
Beispiel #14
0
def reindex_documents():
    for id in DocumentType.get_indexable():
        DocumentType.index(DocumentType.extract_document(id), id)
Beispiel #15
0
def reindex_documents():
    for id in DocumentType.get_indexable():
        DocumentType.index(DocumentType.extract_document(id), id)
Beispiel #16
0
def search(request, page_count=10):
    """Performs search or displays the search form."""

    # Google Custom Search results page
    if not flag_is_active(request, 'elasticsearch'):
        query = request.GET.get('q', '')
        return render(request, 'landing/searchresults.html', {'query': query})

    search_form = SearchForm(request.GET or None)

    context = {
        'search_form': search_form,
        'current_page': 1,
    }

    if search_form.is_valid():
        search_query = search_form.cleaned_data.get('q', None)

        or_dict = {}
        for field in ['title', 'content', 'summary']:
            or_dict[field + '__text'] = search_query

        results = (DocumentType.search().query(or_=or_dict).filter(
            locale=request.locale).highlight(
                *DocumentType.excerpt_fields).facet('tags'))

        filtered_topics = search_form.cleaned_data.get('topic', [])

        if filtered_topics:
            results = results.filter(tags=filtered_topics)

        result_count = results.count()

        # Pagination
        current_page = search_form.cleaned_data['page']
        start = page_count * (current_page - 1)
        end = start + page_count
        results = results[start:end]

        url = URLObject(request.get_full_path())

        # {u'tags': [{u'count': 1, u'term': u'html'}]}
        # then we go through the returned facets and match the items with
        # the allowed filters
        facet_counts = []
        topic_choices = search_form.topic_choices()
        for result_facet in results.facet_counts().get('tags', []):
            allowed_filter = topic_choices.get(result_facet['term'], None)
            if allowed_filter is None:
                continue

            select_url = merge_param(url, 'topic', result_facet['term'])
            select_url = pop_param(select_url, 'page', str(current_page))

            facet_updates = {
                'label': allowed_filter,
                'select_url': select_url,
            }
            if result_facet['term'] in url.query.multi_dict.get('topic', []):
                deselect_url = pop_param(url, 'topic', result_facet['term'])
                deselect_url = pop_param(deselect_url, 'page',
                                         str(current_page))
                result_facet['deselect_url'] = deselect_url

            facet_counts.append(dict(result_facet, **facet_updates))

        context.update({
            'results':
            results,
            'search_query':
            search_query,
            'result_count':
            result_count,
            'facet_counts':
            facet_counts,
            'current_page':
            current_page,
            'prev_page':
            current_page - 1 if start > 0 else None,
            'next_page':
            current_page + 1 if end < result_count else None,
        })

    else:
        search_query = ''
        result_count = 0

    template = 'results.html'
    if flag_is_active(request, 'redesign'):
        template = 'results-redesign.html'

    return render(request, 'search/%s' % template, context)
Beispiel #17
0
def search(request, page_count=10):
    """Performs search or displays the search form."""

    # Google Custom Search results page
    if not flag_is_active(request, 'elasticsearch'):
        query = request.GET.get('q', '')
        return render(request, 'landing/searchresults.html', {'query': query})

    search_form = SearchForm(request.GET or None)

    context = {
        'search_form': search_form,
        'current_page': 1,
    }

    if search_form.is_valid():
        search_query = search_form.cleaned_data.get('q', None)

        or_dict = {}
        for field in ['title', 'content', 'summary']:
            or_dict[field + '__text'] = search_query

        results = (DocumentType.search()
                               .query(or_=or_dict)
                               .filter(locale=request.locale)
                               .highlight(*DocumentType.excerpt_fields)
                               .facet('tags'))

        filtered_topics = search_form.cleaned_data.get('topic', [])

        if filtered_topics:
            results = results.filter(tags=filtered_topics)

        result_count = results.count()

        # Pagination
        current_page = search_form.cleaned_data['page']
        start = page_count * (current_page - 1)
        end = start + page_count
        results = results[start:end]

        url = URLObject(request.get_full_path())

        # {u'tags': [{u'count': 1, u'term': u'html'}]}
        # then we go through the returned facets and match the items with
        # the allowed filters
        facet_counts = []
        topic_choices = search_form.topic_choices()
        for result_facet in results.facet_counts().get('tags', []):
            allowed_filter = topic_choices.get(result_facet['term'], None)
            if allowed_filter is None:
                continue

            select_url = merge_param(url, 'topic', result_facet['term'])
            select_url = pop_param(select_url, 'page', str(current_page))

            facet_updates = {
                'label': allowed_filter,
                'select_url': select_url,
            }
            if result_facet['term'] in url.query.multi_dict.get('topic', []):
                deselect_url = pop_param(url, 'topic', result_facet['term'])
                deselect_url = pop_param(deselect_url, 'page',
                                         str(current_page))
                result_facet['deselect_url'] = deselect_url

            facet_counts.append(dict(result_facet, **facet_updates))

        context.update({
            'results': results,
            'search_query': search_query,
            'result_count': result_count,
            'facet_counts': facet_counts,
            'current_page': current_page,
            'start_index': start + 1,
            'end_index': start + len(results),
            'prev_page': current_page - 1 if start > 0 else None,
            'next_page': current_page + 1 if end < result_count else None,
        })

    else:
        search_query = ''
        result_count = 0

    template = 'results.html'
    if flag_is_active(request, 'redesign'):
        template = 'results-redesign.html'

    return render(request, 'search/%s' % template, context)