Commit 2ab4acbcf4d7c3bdddfd9d86e00f66f45888a1b9
1 parent
84233de6
Exists in
master
and in
39 other branches
Updating search_indexes and adding a better template to display users on search
Showing
12 changed files
with
106 additions
and
49 deletions
Show diff stats
src/accounts/search_indexes.py
... | ... | @@ -10,12 +10,12 @@ class UserIndex(indexes.SearchIndex, indexes.Indexable): |
10 | 10 | username = indexes.CharField(model_attr='username') |
11 | 11 | name = indexes.CharField(model_attr='get_full_name') |
12 | 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') | |
13 | + institution = indexes.CharField(model_attr='institution', null=True) | |
14 | + role = indexes.CharField(model_attr='role', null=True) | |
15 | + twitter = indexes.CharField(model_attr='twitter', null=True) | |
16 | + facebook = indexes.CharField(model_attr='facebook', null=True) | |
17 | + google_talk = indexes.CharField(model_attr='google_talk', null=True) | |
18 | + webpage = indexes.CharField(model_attr='webpage', null=True) | |
19 | 19 | |
20 | 20 | def get_model(self): |
21 | 21 | return User | ... | ... |
src/colab/urls.py
... | ... | @@ -8,7 +8,7 @@ from haystack.query import SearchQuerySet |
8 | 8 | from haystack.views import SearchView |
9 | 9 | |
10 | 10 | from accounts.models import User |
11 | -from super_archives.models import Thread | |
11 | +from super_archives.models import Message | |
12 | 12 | |
13 | 13 | |
14 | 14 | admin.autodiscover() |
... | ... | @@ -19,7 +19,7 @@ urlpatterns = patterns('', |
19 | 19 | url(r'^search/$', 'colab.deprecated.views.other.search', name='search'), |
20 | 20 | url(r'^full_search/', SearchView( |
21 | 21 | template='search/search.html', |
22 | - searchqueryset=SearchQuerySet().models(User, Thread), | |
22 | + searchqueryset=SearchQuerySet().models(User, Message), | |
23 | 23 | form_class=ModelSearchForm, |
24 | 24 | ), name='haystack_search'), |
25 | 25 | ... | ... |
src/super_archives/search_indexes.py
... | ... | @@ -2,23 +2,36 @@ |
2 | 2 | |
3 | 3 | from haystack import indexes |
4 | 4 | |
5 | -from .models import Thread | |
5 | +from .models import Message | |
6 | 6 | |
7 | 7 | |
8 | -class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | |
8 | +class MessageIndex(indexes.SearchIndex, indexes.Indexable): | |
9 | 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.CharField(use_template=True) | |
10 | + mailinglist = indexes.CharField(model_attr='thread__mailinglist__name') | |
11 | + description = indexes.CharField(model_attr='body') | |
12 | + title = indexes.CharField(model_attr='subject_clean') | |
13 | + modified = indexes.DateTimeField(model_attr='received_time') | |
14 | + from_address_user_full_name = indexes.CharField( | |
15 | + model_attr='from_address__user__get_full_name', | |
16 | + null=True, | |
17 | + ) | |
18 | + from_address_full_name = indexes.CharField( | |
19 | + model_attr='from_address__get_full_name', | |
20 | + null=True, | |
21 | + ) | |
22 | + from_address_user_url = indexes.CharField( | |
23 | + model_attr='from_address__user__get_absolute_url', | |
24 | + null=True, | |
25 | + ) | |
26 | + url = indexes.CharField(model_attr='url', null=True) | |
17 | 27 | |
18 | 28 | def get_model(self): |
19 | - return Thread | |
29 | + return Message | |
30 | + | |
31 | + def get_updated_field(self): | |
32 | + return 'received_time' | |
20 | 33 | |
21 | 34 | def index_queryset(self, using=None): |
22 | 35 | return self.get_model().objects.filter( |
23 | - spam=False | |
24 | - ).exclude(subject_token='') | |
36 | + thread__spam=False, spam=False | |
37 | + ).exclude(thread__subject_token='') | ... | ... |
src/super_archives/templates/search/indexes/super_archives/message_text.txt
0 → 100644
src/super_archives/templates/search/indexes/super_archives/thread_Description.txt
src/super_archives/templates/search/indexes/super_archives/thread_Title.txt
src/super_archives/templates/search/indexes/super_archives/thread_modified.txt
src/super_archives/templates/search/indexes/super_archives/thread_text.txt
... | ... | @@ -1,11 +0,0 @@ |
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,0 +1,43 @@ |
1 | +{% load i18n %} | |
2 | + | |
3 | +<li class="preview-message"> | |
4 | + {% if result.Type %} | |
5 | + <img alt="{{ result.Type }}" title="{{ result.Type }}" | |
6 | + src="{{ STATIC_URL }}img/{{ result.Type }}.png" /> | |
7 | + {% else %} | |
8 | + <span class="glyphicon glyphicon-envelope"></span> | |
9 | + {% endif %} | |
10 | + | |
11 | + {% if result.mailinglist %} | |
12 | + <a href="{% url 'super_archives.views.list_messages' %}?list={{ result.mailinglist }}"> | |
13 | + <span class="label label-primary">{{ result.mailinglist }}</span> | |
14 | + </a> | |
15 | + {% endif %} | |
16 | + | |
17 | + <span class="subject"> | |
18 | + <a href="{{ result.url }}#msg-{{ result.pk }}" | |
19 | + title="{% filter striptags|truncatewords:50 %}{{ result.description|escape }}{% endfilter %}"> | |
20 | + {{ result.title }} | |
21 | + </a> | |
22 | + </span> | |
23 | + | |
24 | + <span class="quiet">- {{ result.description|striptags }}</span> | |
25 | + | |
26 | + <div class="quiet"> | |
27 | + <span class="pull-left"> | |
28 | + {% if result.from_address_user_url or result.from_address_full_name or result.last_author or result.Creator %} | |
29 | + {% trans "by" %} | |
30 | + {% endif %} | |
31 | + | |
32 | + {% if result.from_address_user_url %} | |
33 | + <a href="{{ result.from_address_user_url }}">{{ result.from_address_user_full_name }}</a> | |
34 | + {% elif result.from_address_full_name %} | |
35 | + <span>{{ result.from_address_full_name }}</span> | |
36 | + {% else %} | |
37 | + {% firstof result.last_author result.Creator "" %} | |
38 | + {% endif %} | |
39 | + </span> | |
40 | + | |
41 | + <span class="pull-right">{{ result.modified|timesince }} {% trans "ago" %}</span> | |
42 | + </div> | |
43 | +</li> | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +{% load i18n %} | |
2 | + | |
3 | +<li class="preview-message"> | |
4 | + <span class="glyphicon glyphicon-user"></span> | |
5 | + | |
6 | + <span class="subject"> | |
7 | + <a href="{% url 'user_profile' result.username %}">{{ result.name }}</a> | |
8 | + </span> | |
9 | + | |
10 | + <span class="quiet">{% if result.institution %}- {{ result.institution }}{% endif %}{% if result.role %} - {{ result.role }}{% endif %}</span> | |
11 | +</li> | ... | ... |
src/templates/search/search.html
... | ... | @@ -7,8 +7,7 @@ |
7 | 7 | <h2>{% trans "Search" %}</h2> |
8 | 8 | </div> |
9 | 9 | <span class="pull-right quiet"> |
10 | - {{ docs.numFound }} {% trans "documents found in" %} | |
11 | - {{ docs.QTime|floatformat:3 }} {% trans "seconds" %} | |
10 | + {{ page.object_list|length }} {% trans "documents found" %} | |
12 | 11 | </span> |
13 | 12 | </div> |
14 | 13 | <hr/> |
... | ... | @@ -19,7 +18,7 @@ |
19 | 18 | |
20 | 19 | <h4>{% trans "Types" %}</h4> |
21 | 20 | |
22 | - <ul class="none indent"> | |
21 | + <ul class="none indent unstyled-list"> | |
23 | 22 | <li {% ifequal type "wiki" %} title="{% trans "Remove filter" %}" {% endifequal %}> |
24 | 23 | <span class="glyphicon glyphicon-file"></span> |
25 | 24 | <a href="{% ifnotequal type "wiki" %} {% append_to_get type='wiki' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "Wiki" %}</a> |
... | ... | @@ -36,14 +35,22 @@ |
36 | 35 | <span class="glyphicon glyphicon-align-right"></span> |
37 | 36 | <a href="{% ifnotequal type "changeset" %} {% append_to_get type='changeset' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "Changeset" %}</a> |
38 | 37 | </li> |
38 | + <li {% ifequal type "user" %} title="{% trans "Remove filter" %}" {% endifequal %}> | |
39 | + <span class="glyphicon glyphicon-user"></span> | |
40 | + <a href="{% ifnotequal type "user" %} {% append_to_get type='user' %} {% else %} {% append_to_get type="" %} {% endifnotequal %}">{% trans "User" %}</a> | |
41 | + </li> | |
39 | 42 | </ul> |
40 | 43 | </div> |
41 | 44 | |
42 | 45 | <div class="col-lg-10"> |
43 | - <ul class="none indent"> | |
44 | - {% for doc in page.object_list %} | |
46 | + <ul class="none indent list-unstyled"> | |
47 | + {% for result in page.object_list %} | |
45 | 48 | <br /> |
46 | - {% include "message-preview.html" %} | |
49 | + {% if result.model_name == 'message' %} | |
50 | + {% include "search/search-message-preview.html" %} | |
51 | + {% else %} | |
52 | + {% include "search/search-user-preview.html" %} | |
53 | + {% endif %} | |
47 | 54 | {% empty %} |
48 | 55 | <li class="text-center"> |
49 | 56 | {% trans "No results for your search." %} | ... | ... |