Commit 746c6fa150380a1b93e7c4e283b9a99ae575edb7

Authored by Luan
1 parent 429877a9

Adding a baseindex to haystack search indexes

src/proxy/search_indexes.py
... ... @@ -7,25 +7,12 @@ from datetime import datetime
7 7 from django.db.models import Q
8 8 from haystack import indexes
9 9  
  10 +from search.base_indexes import BaseIndex
10 11 from .models import Ticket, Wiki, Revision
11 12  
12 13  
13   -class WikiIndex(indexes.SearchIndex, indexes.Indexable):
14   - # common fields
15   - text = indexes.CharField(document=True, use_template=True, stored=False)
16   - url = indexes.CharField(model_attr='get_absolute_url', indexed=False)
  14 +class WikiIndex(BaseIndex, indexes.Indexable):
17 15 title = indexes.CharField(model_attr='name')
18   - description = indexes.CharField(null=True)
19   - author = indexes.CharField(null=True)
20   - author_url = indexes.CharField(null=True, indexed=False)
21   - created = indexes.DateTimeField(model_attr='created', null=True)
22   - modified = indexes.DateTimeField(model_attr='modified', null=True)
23   - type = indexes.CharField()
24   - icon_name = indexes.CharField(indexed=False)
25   - author_and_username = indexes.CharField(null=True, stored=False)
26   - hits = indexes.IntegerField()
27   -
28   - # trac extra fields
29 16 collaborators = indexes.CharField(
30 17 model_attr='collaborators',
31 18 null=True,
... ... @@ -35,41 +22,6 @@ class WikiIndex(indexes.SearchIndex, indexes.Indexable):
35 22 def get_model(self):
36 23 return Wiki
37 24  
38   - def get_updated_field(self):
39   - return 'modified'
40   -
41   - def prepare(self, obj):
42   - data = super(WikiIndex, self).prepare(obj)
43   - if obj.hits <= 10:
44   - data['boost'] = 1
45   - else:
46   - data['boost'] = math.log(obj.hits)
47   - return data
48   -
49   - def prepare_hits(self, obj):
50   - return obj.hits
51   -
52   - def prepare_author(self, obj):
53   - author = obj.get_author()
54   - if author:
55   - return author.get_full_name()
56   - return obj.author
57   -
58   - def prepare_author_and_username(self, obj):
59   - author = obj.get_author()
60   - if not author:
61   - return obj.author
62   - return u'{}\n{}'.format(
63   - author.get_full_name(),
64   - author.username,
65   - )
66   -
67   - def prepare_author_url(self, obj):
68   - author = obj.get_author()
69   - if author:
70   - return author.get_absolute_url()
71   - return None
72   -
73 25 def prepare_description(self, obj):
74 26 return u'{}\n{}'.format(obj.wiki_text, obj.collaborators)
75 27  
... ... @@ -80,23 +32,8 @@ class WikiIndex(indexes.SearchIndex, indexes.Indexable):
80 32 return u'wiki'
81 33  
82 34  
83   -class TicketIndex(indexes.SearchIndex, indexes.Indexable):
84   - # common fields
85   - text = indexes.CharField(document=True, use_template=True, stored=False)
86   - url = indexes.CharField(model_attr='get_absolute_url', indexed=False)
87   - title = indexes.CharField()
88   - description = indexes.CharField(null=True)
89   - author = indexes.CharField(null=True)
90   - author_url = indexes.CharField(null=True, indexed=False)
91   - created = indexes.DateTimeField(model_attr='created', null=True)
92   - modified = indexes.DateTimeField(model_attr='modified', null=True)
93   - type = indexes.CharField()
94   - icon_name = indexes.CharField(indexed=False)
  35 +class TicketIndex(BaseIndex, indexes.Indexable):
95 36 tag = indexes.CharField(model_attr='status', null=True)
96   - author_and_username = indexes.CharField(null=True, stored=False)
97   - hits = indexes.IntegerField()
98   -
99   - # trac extra fields
100 37 milestone = indexes.CharField(model_attr='milestone', null=True)
101 38 component = indexes.CharField(model_attr='component', null=True)
102 39 severity = indexes.CharField(model_attr='severity', null=True)
... ... @@ -111,41 +48,6 @@ class TicketIndex(indexes.SearchIndex, indexes.Indexable):
111 48 def get_model(self):
112 49 return Ticket
113 50  
114   - def get_updated_field(self):
115   - return 'modified'
116   -
117   - def prepare(self, obj):
118   - data = super(TicketIndex, self).prepare(obj)
119   - if obj.hits <= 10:
120   - data['boost'] = 1
121   - else:
122   - data['boost'] = math.log(obj.hits)
123   - return data
124   -
125   - def prepare_hits(self, obj):
126   - return obj.hits
127   -
128   - def prepare_author(self, obj):
129   - author = obj.get_author()
130   - if author:
131   - return author.get_full_name()
132   - return obj.author
133   -
134   - def prepare_author_and_username(self, obj):
135   - author = obj.get_author()
136   - if not author:
137   - return obj.author
138   - return u'{}\n{}'.format(
139   - author.get_full_name(),
140   - author.username,
141   - )
142   -
143   - def prepare_author_url(self, obj):
144   - author = obj.get_author()
145   - if author:
146   - return author.get_absolute_url()
147   - return None
148   -
149 51 def prepare_description(self, obj):
150 52 return u'{}\n{}\n{}\n{}\n{}\n{}\n{}'.format(
151 53 obj.description, obj.milestone, obj.component, obj.severity,
... ... @@ -162,22 +64,9 @@ class TicketIndex(indexes.SearchIndex, indexes.Indexable):
162 64 return 'ticket'
163 65  
164 66  
165   -class RevisionIndex(indexes.SearchIndex, indexes.Indexable):
166   - # common fields
167   - text = indexes.CharField(document=True, use_template=True, stored=False)
168   - url = indexes.CharField(model_attr='get_absolute_url', indexed=False)
169   - title = indexes.CharField()
  67 +class RevisionIndex(BaseIndex, indexes.Indexable):
170 68 description = indexes.CharField(model_attr='message', null=True)
171   - author = indexes.CharField(null=True)
172   - author_url = indexes.CharField(null=True, indexed=False)
173   - created = indexes.DateTimeField(model_attr='created', null=True)
174 69 modified = indexes.DateTimeField(model_attr='created', null=True)
175   - type = indexes.CharField()
176   - icon_name = indexes.CharField(indexed=False)
177   - author_and_username = indexes.CharField(null=True, stored=False)
178   - hits = indexes.IntegerField()
179   -
180   - # trac extra fields
181 70 repository_name = indexes.CharField(
182 71 model_attr='repository_name',
183 72 stored=False
... ... @@ -189,37 +78,11 @@ class RevisionIndex(indexes.SearchIndex, indexes.Indexable):
189 78 def get_updated_field(self):
190 79 return 'created'
191 80  
192   - def prepare(self, obj):
193   - data = super(RevisionIndex, self).prepare(obj)
  81 + def get_boost(self, obj, data):
194 82 if obj.hits <= 10:
195 83 data['boost'] = 0.8
196 84 else:
197 85 data['boost'] = math.log(obj.hits) * 0.8
198   - return data
199   -
200   - def prepare_hits(self, obj):
201   - return obj.hits
202   -
203   - def prepare_author(self, obj):
204   - author = obj.get_author()
205   - if author:
206   - return author.get_full_name()
207   - return obj.author
208   -
209   - def prepare_author_and_username(self, obj):
210   - author = obj.get_author()
211   - if not author:
212   - return obj.author
213   - return u'{}\n{}'.format(
214   - author.get_full_name(),
215   - author.username,
216   - )
217   -
218   - def prepare_author_url(self, obj):
219   - author = obj.get_author()
220   - if author:
221   - return author.get_absolute_url()
222   - return None
223 86  
224 87 def prepare_icon_name(self, obj):
225 88 return u'align-right'
... ...
src/search/base_indexes.py 0 → 100644
... ... @@ -0,0 +1,55 @@
  1 +# -*- coding: utf-8 -*-
  2 +
  3 +import math
  4 +
  5 +from haystack import indexes
  6 +
  7 +
  8 +class BaseIndex(indexes.SearchIndex):
  9 + text = indexes.CharField(document=True, use_template=True, stored=False)
  10 + url = indexes.CharField(model_attr='get_absolute_url', indexed=False)
  11 + title = indexes.CharField()
  12 + description = indexes.CharField(null=True)
  13 + author = indexes.CharField(null=True)
  14 + author_url = indexes.CharField(null=True, indexed=False)
  15 + created = indexes.DateTimeField(model_attr='created', null=True)
  16 + modified = indexes.DateTimeField(model_attr='modified', null=True)
  17 + type = indexes.CharField()
  18 + icon_name = indexes.CharField(indexed=False)
  19 + author_and_username = indexes.CharField(null=True, stored=False)
  20 + hits = indexes.IntegerField(model_attr='hits')
  21 +
  22 + def get_updated_field(self):
  23 + return 'modified'
  24 +
  25 + def get_boost(self, obj, data):
  26 + if obj.hits <= 10:
  27 + data['boost'] = 1
  28 + else:
  29 + data['boost'] = math.log(obj.hits)
  30 +
  31 + def prepare(self, obj):
  32 + data = super(BaseIndex, self).prepare(obj)
  33 + self.get_boost(obj, data)
  34 + return data
  35 +
  36 + def prepare_author(self, obj):
  37 + author = obj.get_author()
  38 + if author:
  39 + return author.get_full_name()
  40 + return obj.author
  41 +
  42 + def prepare_author_and_username(self, obj):
  43 + author = obj.get_author()
  44 + if not author:
  45 + return obj.author
  46 + return u'{}\n{}'.format(
  47 + author.get_full_name(),
  48 + author.username,
  49 + )
  50 +
  51 + def prepare_author_url(self, obj):
  52 + author = obj.get_author()
  53 + if author:
  54 + return author.get_absolute_url()
  55 + return None
... ...
src/super_archives/search_indexes.py
... ... @@ -4,17 +4,11 @@ import math
4 4  
5 5 from haystack import indexes
6 6  
  7 +from search.base_indexes import BaseIndex
7 8 from .models import Thread
8 9  
9 10  
10   -class ThreadIndex(indexes.SearchIndex, indexes.Indexable):
11   - # common fields
12   - text = indexes.CharField(document=True, use_template=True, stored=False)
13   - url = indexes.CharField(
14   - model_attr='get_absolute_url',
15   - null=True,
16   - indexed=False
17   - )
  11 +class ThreadIndex(BaseIndex, indexes.Indexable):
18 12 title = indexes.CharField(model_attr='latest_message__subject_clean')
19 13 description = indexes.CharField(use_template=True)
20 14 latest_description = indexes.CharField(
... ... @@ -25,19 +19,12 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable):
25 19 modified = indexes.DateTimeField(
26 20 model_attr='latest_message__received_time'
27 21 )
28   - author = indexes.CharField(null=True)
29   - author_url = indexes.CharField(null=True, indexed=False)
30   - type = indexes.CharField()
31   - icon_name = indexes.CharField(indexed=False)
32 22 tag = indexes.CharField(model_attr='mailinglist__name')
33 23 collaborators = indexes.CharField(use_template=True, stored=False)
34   -
35   - author_and_username = indexes.CharField(null=True, stored=False)
36 24 mailinglist_url = indexes.CharField(
37 25 model_attr='mailinglist__get_absolute_url',
38 26 indexed=False,
39 27 )
40   - hits = indexes.IntegerField()
41 28  
42 29 def get_model(self):
43 30 return Thread
... ... @@ -45,17 +32,6 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable):
45 32 def get_updated_field(self):
46 33 return 'latest_message__received_time'
47 34  
48   - def prepare(self, obj):
49   - data = super(ThreadIndex, self).prepare(obj)
50   - if obj.hits <= 10:
51   - data['boost'] = 1
52   - else:
53   - data['boost'] = math.log(obj.hits)
54   - return data
55   -
56   - def prepare_hits(self, obj):
57   - return obj.hits
58   -
59 35 def prepare_author(self, obj):
60 36 return obj.message_set.first().from_address.get_full_name()
61 37  
... ...