src/p4l/search/index.py
changeset 114 93b45b4f423c
parent 113 c05567404888
child 117 0a4e7d6ebe80
--- a/src/p4l/search/index.py	Fri Sep 20 22:21:48 2013 +0200
+++ b/src/p4l/search/index.py	Sat Sep 21 23:49:04 2013 +0200
@@ -8,25 +8,53 @@
 from haystack import indexes
 
 from p4l.models import Record
-from p4l.utils import strip_accents
+from p4l.utils import strip_accents, get_labels_for_uris, safe_cache_key
+
+from django.core.cache import get_cache
+from django.conf import settings
+import logging
+
+logger = logging.getLogger(__name__)
+
+def get_organizations_label(uris):
+    cache = get_cache('indexation')
+    
+    res = {}
+    missing_uris = []
+    
+    for uri in uris: 
+        label = cache.get(safe_cache_key(uri))
+        if label is not None:
+            res[uri] = label
+        else:
+            missing_uris.append(uri)
+            
+    new_labels = get_labels_for_uris(missing_uris, settings.RDF_SCHEMES['organization'], None, True)
+    for k,v in new_labels.iteritems():
+        cache.set(safe_cache_key(k),v)
+        res[k] = v
+    
+    return res
 
 
-class RecordIndex(indexes.SearchIndex, indexes.Indexable):
+class RecordIndex(indexes.SearchIndex, indexes.Indexable):    
 
     text = indexes.CharField(document=True, use_template=True, stored=False)
     identifier = indexes.CharField(model_attr="identifier", stored=True)
     titles = indexes.MultiValueField(model_attr="get_titles", stored=False)
     titles_src = indexes.MultiValueField(model_attr="get_titles", stored=True, indexed=False)
-    authors = indexes.MultiValueField(model_attr="get_authors", stored=False)
+    authors = indexes.MultiValueField(model_attr="all_authors", stored=False)
     
     years = indexes.MultiValueField(model_attr="get_imprints_years", indexed=False, stored=True)
     
+    def prepare(self, obj):
+        authors = obj.get_authors() + get_organizations_label(obj.get_corporate_authors()).values()
+        obj.all_authors = [strip_accents(unicode(v)) for v in authors] 
+        return indexes.SearchIndex.prepare(self, obj)
+    
     def prepare_titles(self, obj):
         return [strip_accents(v) for v in obj.get_titles()]
 
-    def prepare_authors(self, obj):
-        return [strip_accents(v) for v in obj.get_authors()]
-
     def get_model(self):
         return Record
 
@@ -34,4 +62,4 @@
         return "modification_date"
     
     def index_queryset(self, using=None):
-        return Record.objects.using(using).all().prefetch_related("imprints","authors", "titles")
\ No newline at end of file
+        return Record.objects.using(using).all().prefetch_related("imprints","authors", "titles", "corporateAuthors")
\ No newline at end of file