Commit d8b178009f2a4c1183327eb2c754fa9d41753752

Authored by Luan
1 parent b1ead9be

Changing super_archives search index to index thread instead of messages

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 %}
... ...