Commit d8b178009f2a4c1183327eb2c754fa9d41753752
1 parent
b1ead9be
Exists in
master
and in
39 other branches
Changing super_archives search index to index thread instead of messages
Showing
4 changed files
with
54 additions
and
28 deletions
Show diff stats
src/super_archives/search_indexes.py
| ... | ... | @@ -2,49 +2,54 @@ |
| 2 | 2 | |
| 3 | 3 | from haystack import indexes |
| 4 | 4 | |
| 5 | -from .models import Message | |
| 5 | +from .models import Thread | |
| 6 | 6 | |
| 7 | 7 | |
| 8 | -class MessageIndex(indexes.SearchIndex, indexes.Indexable): | |
| 8 | +class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | |
| 9 | 9 | # common fields |
| 10 | 10 | text = indexes.CharField(document=True, use_template=True) |
| 11 | - url = indexes.CharField(null=True) | |
| 12 | - title = indexes.CharField(model_attr='subject_clean') | |
| 13 | - description = indexes.CharField(model_attr='body') | |
| 14 | - modified = indexes.DateTimeField(model_attr='received_time') | |
| 15 | - author = indexes.CharField( | |
| 16 | - model_attr='from_address__get_full_name', null=True | |
| 11 | + url = indexes.CharField(model_attr='get_absolute_url', null=True) | |
| 12 | + title = indexes.CharField(model_attr='latest_message__subject_clean') | |
| 13 | + description = indexes.CharField(use_template=True) | |
| 14 | + created = indexes.DateTimeField() | |
| 15 | + modified = indexes.DateTimeField( | |
| 16 | + model_attr='latest_message__received_time' | |
| 17 | 17 | ) |
| 18 | + author = indexes.CharField(null=True) | |
| 18 | 19 | author_url = indexes.CharField(null=True) |
| 19 | 20 | type = indexes.CharField() |
| 20 | 21 | icon_name = indexes.CharField() |
| 21 | - tag = indexes.CharField(model_attr='thread__mailinglist__name') | |
| 22 | + tag = indexes.CharField(model_attr='mailinglist__name') | |
| 22 | 23 | |
| 23 | 24 | mailinglist_url = indexes.CharField( |
| 24 | - model_attr='thread__mailinglist__get_absolute_url' | |
| 25 | + model_attr='mailinglist__get_absolute_url' | |
| 25 | 26 | ) |
| 26 | 27 | |
| 27 | 28 | def get_model(self): |
| 28 | - return Message | |
| 29 | + return Thread | |
| 29 | 30 | |
| 30 | 31 | def get_updated_field(self): |
| 31 | 32 | return 'received_time' |
| 32 | 33 | |
| 34 | + def prepare_author(self, obj): | |
| 35 | + return obj.message_set.first().from_address.get_full_name() | |
| 36 | + | |
| 33 | 37 | def prepare_author_url(self, obj): |
| 34 | - if obj.from_address.user: | |
| 35 | - return obj.from_address.user.get_absolute_url() | |
| 38 | + first_message = obj.message_set.first() | |
| 39 | + if first_message.from_address.user: | |
| 40 | + return first_message.from_address.user.get_absolute_url() | |
| 36 | 41 | return None |
| 37 | 42 | |
| 43 | + def prepare_created(self, obj): | |
| 44 | + return obj.message_set.first().received_time | |
| 45 | + | |
| 38 | 46 | def prepare_icon_name(self, obj): |
| 39 | 47 | return u'envelope' |
| 40 | 48 | |
| 41 | 49 | def prepare_type(self, obj): |
| 42 | 50 | return u'thread' |
| 43 | 51 | |
| 44 | - def prepare_url(self, obj): | |
| 45 | - return u'{}#msg-{}'.format(obj.url, obj.pk) | |
| 46 | - | |
| 47 | 52 | def index_queryset(self, using=None): |
| 48 | 53 | return self.get_model().objects.filter( |
| 49 | - thread__spam=False, spam=False | |
| 50 | - ).exclude(thread__subject_token='') | |
| 54 | + spam=False | |
| 55 | + ).exclude(subject_token='') | ... | ... |
src/super_archives/templates/search/indexes/super_archives/message_text.txt
| ... | ... | @@ -1,10 +0,0 @@ |
| 1 | -{{ object.thread.mailinglist.name }} | |
| 2 | -{{ object.thread.mailinglist.name|slugify }} | |
| 3 | -{{ object.thread.subject_token }} | |
| 4 | - | |
| 5 | -{{ object.body }} | |
| 6 | -{{ object.body|slugify }} | |
| 7 | -{{ object.subject_clean }} | |
| 8 | -{{ object.subject_clean|slugify }} | |
| 9 | - | |
| 10 | -{{ object.from_address.get_full_name }} |
src/super_archives/templates/search/indexes/super_archives/thread_description.txt
0 → 100644
| ... | ... | @@ -0,0 +1,10 @@ |
| 1 | +{% for message in object.message_set.iterator %} | |
| 2 | + {% if not spam %} | |
| 3 | + {{ message.subject_clean }} | |
| 4 | + {{ message.subject_clean|slugify }} | |
| 5 | + {{ message.body }} | |
| 6 | + {{ message.body|slugify }} | |
| 7 | + {{ message.from_address.get_full_name }} | |
| 8 | + {{ message.from_address.get_full_name|slugify }} | |
| 9 | + {% endif %} | |
| 10 | +{% endfor %} | ... | ... |
src/super_archives/templates/search/indexes/super_archives/thread_text.txt
0 → 100644
| ... | ... | @@ -0,0 +1,21 @@ |
| 1 | +{{ object.thread.mailinglist.name }} | |
| 2 | +{{ object.thread.mailinglist.name|slugify }} | |
| 3 | +{{ object.thread.subject_token }} | |
| 4 | + | |
| 5 | +{{ object.body }} | |
| 6 | +{{ object.body|slugify }} | |
| 7 | +{{ object.subject_clean }} | |
| 8 | +{{ object.subject_clean|slugify }} | |
| 9 | + | |
| 10 | +{{ object.from_address.get_full_name }} | |
| 11 | + | |
| 12 | +{% for message in object.message_set.iterator %} | |
| 13 | + {% if not spam %} | |
| 14 | + {{ message.subject_clean }} | |
| 15 | + {{ message.subject_clean|slugify }} | |
| 16 | + {{ message.body }} | |
| 17 | + {{ message.body|slugify }} | |
| 18 | + {{ message.from_address.get_full_name }} | |
| 19 | + {{ message.from_address.get_full_name|slugify }} | |
| 20 | + {% endif %} | |
| 21 | +{% endfor %} | ... | ... |