save a not optimised annotation search
authorcavaliet
Wed, 19 Mar 2014 12:38:06 +0100
changeset 20 0c292c3abf64
parent 19 aa9735eb01ac
child 21 3fdccf07adaf
save a not optimised annotation search
src/spel/views.py
--- a/src/spel/views.py	Tue Mar 18 15:15:19 2014 +0100
+++ b/src/spel/views.py	Wed Mar 19 12:38:06 2014 +0100
@@ -98,37 +98,47 @@
         q = request.GET.get("q", "")
         page = 1
         content_list = None
+        # Query search
         if q!="":
             field = "abstract"
             results, nb_contents, nb_segments = get_search_results(request, q, field, page, content_list)
             results = results.object_list
         else:
-            type_inter_param = request.GET.get("type_inter", "")
-            seg_queryset = []
+            results = None
+            nb_contents = 0
+            nb_segments = 0
+        # Filter by tags
+        type_inter_param = request.GET.get("type_inter", "")
+        if type_inter_param!="":
+            type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
+            tags = Tag.objects.filter(name__in=type_inter)
+            # If results are from search, we get all segment from content list
+            seg_queryset = Segment
+            if results :
+                seg_queryset = []
+                for r in results:
+                    seg_queryset += r["list"]
+                seg_queryset = Segment.objects.filter(id__in=[s.id for s in seg_queryset])
+            # Get segments from tagged items
+            tagged_segs = TaggedItem.objects.get_by_model(seg_queryset, tags).values()
+            # Prefetch all contents
+            all_contents = Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs])
             results = []
-            tagged_segs = []
-            if type_inter_param!="":
-                type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
-                tags = Tag.objects.filter(name__in=type_inter)
-                # Get segments from tagged items
-                tagged_segs = TaggedItem.objects.get_by_model(Segment, tags).values()
-                # Prefetch all contents
-                all_contents = Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs])
-                for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
-                    # Get good content
-                    content = None
-                    content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
-                    if len(content_filter)>0:
-                        content = content_filter[0]
-                    if content is None:
-                        continue
-                    # Get segments
-                    s = list(items)
-                    results.append({ 'content': content, 'list': s })
+            for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
+                # Get good content
+                content = None
+                content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
+                if len(content_filter)>0:
+                    content = content_filter[0]
+                if content is None:
+                    continue
+                # Get segments
+                s = list(items)
+                results.append({ 'content': content, 'list': s })
             nb_contents = len(results)
             nb_segments = len(tagged_segs)
         
-        context = {"results": results, "nb_contents": nb_contents, "nb_annotations": nb_segments}
+        context = {"q":q, "searched_tags": type_inter_param.split(","), "results": results, "nb_contents": nb_contents, "nb_annotations": nb_segments}
         
         return self.render_to_response(context)