Commit 9e61c6b83aee05d774fdad69bfc6c3b3bfbf5050
1 parent
82526dcc
Exists in
master
and in
39 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 %} | ... | ... |