# HG changeset patch # User cavaliet # Date 1395229086 -3600 # Node ID 0c292c3abf646dbcd5fd62cecfb42a273d29f3a8 # Parent aa9735eb01ac4aec993aaa39819d7ffb22777fe9 save a not optimised annotation search diff -r aa9735eb01ac -r 0c292c3abf64 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)