Commit 9e61c6b83aee05d774fdad69bfc6c3b3bfbf5050
1 parent
82526dcc
Exists in
master
and in
13 other branches
Adding first haystack search indexes
Showing
11 changed files
with
164 additions
and
1 deletions
Show diff stats
| ... | ... | @@ -0,0 +1,24 @@ |
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 3 | +from haystack import indexes | |
| 4 | + | |
| 5 | +from .models import User | |
| 6 | + | |
| 7 | + | |
| 8 | +class UserIndex(indexes.SearchIndex, indexes.Indexable): | |
| 9 | + text = indexes.CharField(document=True, use_template=True) | |
| 10 | + username = indexes.CharField(model_attr='username') | |
| 11 | + name = indexes.CharField(model_attr='get_full_name') | |
| 12 | + email = indexes.CharField(model_attr='email') | |
| 13 | + institution = indexes.CharField(model_attr='institution') | |
| 14 | + role = indexes.CharField(model_attr='role') | |
| 15 | + twitter = indexes.CharField(model_attr='twitter') | |
| 16 | + facebook = indexes.CharField(model_attr='facebook') | |
| 17 | + google_talk = indexes.CharField(model_attr='google_talk') | |
| 18 | + webpage = indexes.CharField(model_attr='webpage') | |
| 19 | + | |
| 20 | + def get_model(self): | |
| 21 | + return User | |
| 22 | + | |
| 23 | + def index_queryset(self, using=None): | |
| 24 | + return self.get_model().objects.filter(is_active=True) | ... | ... |
src/accounts/templates/search/indexes/accounts/user_text.txt
0 → 100644
src/colab/urls.py
| ... | ... | @@ -3,6 +3,12 @@ from django.conf.urls import patterns, include, url |
| 3 | 3 | from django.conf import settings |
| 4 | 4 | from django.views.generic import TemplateView |
| 5 | 5 | from django.contrib import admin |
| 6 | +from haystack.forms import ModelSearchForm | |
| 7 | +from haystack.query import SearchQuerySet | |
| 8 | +from haystack.views import SearchView | |
| 9 | + | |
| 10 | +from accounts.models import User | |
| 11 | +from super_archives.models import Thread | |
| 6 | 12 | |
| 7 | 13 | |
| 8 | 14 | admin.autodiscover() |
| ... | ... | @@ -11,6 +17,11 @@ urlpatterns = patterns('', |
| 11 | 17 | url(r'^$', 'colab.deprecated.views.other.home', name='home'), |
| 12 | 18 | |
| 13 | 19 | url(r'^search/$', 'colab.deprecated.views.other.search', name='search'), |
| 20 | + url(r'^full_search/', SearchView( | |
| 21 | + template='search/search.html', | |
| 22 | + searchqueryset=SearchQuerySet().models(User, Thread), | |
| 23 | + form_class=ModelSearchForm, | |
| 24 | + ), name='haystack_search'), | |
| 14 | 25 | |
| 15 | 26 | url(r'open-data/$', TemplateView.as_view(template_name='open-data.html'), |
| 16 | 27 | name='opendata'), | ... | ... |
| ... | ... | @@ -0,0 +1,22 @@ |
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 3 | +from haystack import indexes | |
| 4 | + | |
| 5 | +from .models import Thread | |
| 6 | + | |
| 7 | + | |
| 8 | +class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | |
| 9 | + text = indexes.CharField(document=True, use_template=True) | |
| 10 | + subject_token = indexes.CharField(model_attr='subject_token') | |
| 11 | + mailinglist = indexes.CharField(model_attr='mailinglist') | |
| 12 | + latest_message = indexes.CharField(model_attr='latest_message') | |
| 13 | + Description = indexes.CharField(use_template=True) | |
| 14 | + Title = indexes.CharField(use_template=True) | |
| 15 | + url = indexes.CharField(use_template=True, null=True) | |
| 16 | + modified = indexes.DateTimeField(use_template=True) | |
| 17 | + | |
| 18 | + def get_model(self): | |
| 19 | + return Thread | |
| 20 | + | |
| 21 | + def index_queryset(self, using=None): | |
| 22 | + return self.get_model().objects.filter(spam=False) | ... | ... |
src/super_archives/templates/search/indexes/super_archives/thread_Description.txt
0 → 100644
src/super_archives/templates/search/indexes/super_archives/thread_Title.txt
0 → 100644
src/super_archives/templates/search/indexes/super_archives/thread_modified.txt
0 → 100644
src/super_archives/templates/search/indexes/super_archives/thread_text.txt
0 → 100644
| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | +{{ object.subject_token }} | |
| 2 | +{{ object.mailinglist.name }} | |
| 3 | +{{ object.mailinglist.email }} | |
| 4 | +{{ object.mailinglist.description }} | |
| 5 | +{{ object.spam }} | |
| 6 | +{% for message in object.message_set.all %} | |
| 7 | + {{ message.Title }} | |
| 8 | + {{ message.Description }} | |
| 9 | + {{ message.url }} | |
| 10 | + {{ message.modified }} | |
| 11 | +{% endfor %} | ... | ... |
src/super_archives/templates/search/indexes/super_archives/thread_url.txt
0 → 100644
src/templates/base.html
| ... | ... | @@ -107,7 +107,7 @@ |
| 107 | 107 | {% endif %} |
| 108 | 108 | </ul> |
| 109 | 109 | |
| 110 | - <form action="/search/" method="GET" id="search-form" class="navbar-form navbar-right hidden-xs hidden-sm" role="search"> | |
| 110 | + <form action="{% url 'haystack_search' %}" method="GET" id="search-form" class="navbar-form navbar-right hidden-xs hidden-sm" role="search"> | |
| 111 | 111 | <div class="form-group"> |
| 112 | 112 | <label class="sr-only" for="header-searchbox">{% trans 'Search here...' %}</label> |
| 113 | 113 | <input name="q" id="header-searchbox" | ... | ... |
| ... | ... | @@ -0,0 +1,74 @@ |
| 1 | +{% extends "base.html" %} | |
| 2 | +{% load i18n %} | |
| 3 | +{% load append_to_get %} | |
| 4 | +{% block main-content %} | |
| 5 | + <div class="row"> | |
| 6 | + <div class="col-lg-2"> | |
| 7 | + <h2>{% trans "Search" %}</h2> | |
| 8 | + </div> | |
| 9 | + <span class="pull-right quiet"> | |
| 10 | + {{ docs.numFound }} {% trans "documents found in" %} | |
| 11 | + {{ docs.QTime|floatformat:3 }} {% trans "seconds" %} | |
| 12 | + </span> | |
| 13 | + </div> | |
| 14 | + <hr/> | |
| 15 | + | |
| 16 | + <div class="row"> | |
| 17 | + <div class="col-lg-2"> | |
| 18 | + <h3>{% trans "Filters" %}</h3> | |
| 19 | + | |
| 20 | + <h4>{% trans "Types" %}</h4> | |
| 21 | + | |
| 22 | + <ul class="none indent"> | |
| 23 | + <li {% ifequal type "wiki" %} title="{% trans "Remove filter" %}" {% endifequal %}> | |
| 24 | + <span class="glyphicon glyphicon-file"></span> | |
| 25 | + <a href="{% ifnotequal type "wiki" %} {% append_to_get type='wiki' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "Wiki" %}</a> | |
| 26 | + </li> | |
| 27 | + <li {% ifequal type "thread" %} title="{% trans "Remove filter" %}" {% endifequal %}> | |
| 28 | + <span class="glyphicon glyphicon-envelope"></span> | |
| 29 | + <a href="{% ifnotequal type "thread" %} {% append_to_get type='thread' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "Discussion" %}</a> | |
| 30 | + </li> | |
| 31 | + <li {% ifequal type "ticket" %} title="{% trans "Remove filter" %}" {% endifequal %}> | |
| 32 | + <span class="glyphicon glyphicon-tag"></span> | |
| 33 | + <a href="{% ifnotequal type "ticket" %} {% append_to_get type='ticket' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "Ticket" %}</a> | |
| 34 | + </li> | |
| 35 | + <li {% ifequal type "changeset" %} title="{% trans "Remove filter" %}" {% endifequal %}> | |
| 36 | + <span class="glyphicon glyphicon-align-right"></span> | |
| 37 | + <a href="{% ifnotequal type "changeset" %} {% append_to_get type='changeset' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "Changeset" %}</a> | |
| 38 | + </li> | |
| 39 | + </ul> | |
| 40 | + </div> | |
| 41 | + | |
| 42 | + <div class="col-lg-10"> | |
| 43 | + <ul class="none indent"> | |
| 44 | + {% for doc in page.object_list %} | |
| 45 | + <br /> | |
| 46 | + {% include "message-preview.html" %} | |
| 47 | + {% empty %} | |
| 48 | + <li class="text-center"> | |
| 49 | + {% trans "No results for your search." %} | |
| 50 | + </li> | |
| 51 | + {% endfor %} | |
| 52 | + </ul> | |
| 53 | + | |
| 54 | + {% if docs.numFound %} | |
| 55 | + <div> | |
| 56 | + <span> | |
| 57 | + {% if docs.has_previous %} | |
| 58 | + <a href="{% append_to_get p=docs.previous_page_number %}">{% trans "Previous" %}</a> | |
| 59 | + {% endif %} | |
| 60 | + | |
| 61 | + <span> | |
| 62 | + {% trans "Page" %} {{ docs.page_num }} {% trans "of" %} {{ docs.num_of_pages }} | |
| 63 | + </span> | |
| 64 | + | |
| 65 | + {% if docs.has_next %} | |
| 66 | + <a href="{% append_to_get p=docs.next_page_number %}">{% trans "Next" %}</a> | |
| 67 | + {% endif %} | |
| 68 | + </span> | |
| 69 | + </div> | |
| 70 | + </div> | |
| 71 | + {% endif %} | |
| 72 | + </div> | |
| 73 | + | |
| 74 | +{% endblock %} | ... | ... |