Enhance fragment search. Highlight works.
authorcavaliet
Tue, 19 Feb 2013 13:12:30 +0100
changeset 45 ea2c1961a515
parent 43 119cd616faa4
child 46 a766937acc12
Enhance fragment search. Highlight works.
src/egonomy/search_indexes/backends/elasticsearch_backend.py
src/egonomy/search_indexes/indexes.py
src/egonomy/templates/egonomy_all_fragments.html
src/egonomy/views.py
--- a/src/egonomy/search_indexes/backends/elasticsearch_backend.py	Mon Feb 18 15:43:46 2013 +0100
+++ b/src/egonomy/search_indexes/backends/elasticsearch_backend.py	Tue Feb 19 13:12:30 2013 +0100
@@ -30,18 +30,17 @@
                         result_class=result_class)
                 
         #TODO : try to make list of field dynamic
-        #TODO : How to handle multiple 
+        #TODO : How to handle multiple
         if highlight:
             highlight_def = kwargs.get('highlight', {})
+            fields_def = highlight_def.get('fields', {})
             
-            fields_def = highlight_def.get('fields', {})
- 
-            if models is None or len(models) == 0 or ImageMetadata in models or Fragment in models:
+            if models is None or len(models) == 0 or Fragment in models:
                 fields_def['tags'] = {}
                 fields_def['title'] = {}
                 fields_def['description'] = {}
             
-            kwargs['highlight'] = highlight_def.update({
+            highlight_def.update({
                 'pre_tags' : ["<span class='highlight'>"],
                 'post_tags' : ["</span>"],
                 "number_of_fragments" : 0,
--- a/src/egonomy/search_indexes/indexes.py	Mon Feb 18 15:43:46 2013 +0100
+++ b/src/egonomy/search_indexes/indexes.py	Tue Feb 19 13:12:30 2013 +0100
@@ -34,10 +34,10 @@
     text = indexes.CharField(document=True, use_template=True)
     
     image = indexes.CharField(model_attr='image', indexed=False, stored=True)
-    author = indexes.CharField(model_attr='author', null=True)
-    title = indexes.CharField(model_attr='title', null=True)
-    description = indexes.CharField(model_attr='description', null=True)
-    tags = indexes.CharField(model_attr='tags', null=True)
+    author = indexes.CharField(model_attr='author', null=True, stored=True)
+    title = indexes.CharField(model_attr='title', null=True, stored=True)
+    description = indexes.CharField(model_attr='description', null=True, stored=True)
+    tags = indexes.CharField(model_attr='tags', null=True, stored=True)
     
     def get_model(self):
         return Fragment
--- a/src/egonomy/templates/egonomy_all_fragments.html	Mon Feb 18 15:43:46 2013 +0100
+++ b/src/egonomy/templates/egonomy_all_fragments.html	Tue Feb 19 13:12:30 2013 +0100
@@ -27,7 +27,8 @@
                               <a href="{% url 'view_fragment' fragment_pk=frg.pk %}">
                               <div class="center-image">
                                 <div class="image-and-fragment">
-                                 {% with frg.image.info.image_file as image %}
+                                 {% with frgmt=frg.object|default:frg  %}
+                                 {% with image=frgmt.image.info.image_file %}
                                  {% if image %}
                                   {% if image|is_portrait %}
 							 	    {% thumbnail image "x110" format="PNG" crop="center" as im %}
@@ -47,11 +48,12 @@
 	                             {% endif %}
 	                             {% endwith %}
 	                                  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 1 1" preserveAspectRatio="none">
-                                        <path d="{{ frg.coordinates }}" stroke="red" stroke-width=".02" fill="red" fill-opacity=".3" />
+                                        <path d="{{ frgmt.coordinates }}" stroke="red" stroke-width=".02" fill="red" fill-opacity=".3" />
                                       </svg>
+                                 {% endwith %}
                                 </div>
                              </div>
-                             <h3>{% if search %}{% highlight frg.title with search html_tag "span" css_class "highlight" %}{% else %}{{ frg.title }}{% endif %}</h3></a>
+                             <h3>{% if search %}{{ frg.highlighted.title|first|safe|default:frg.title }}{% else %}{{ frg.title }}{% endif %}</h3></a>
                              <p>{% trans "Annotated by" %} <strong>{{ frg.author }}</strong></p>
                             </li>
                           {% endfor %}
--- a/src/egonomy/views.py	Mon Feb 18 15:43:46 2013 +0100
+++ b/src/egonomy/views.py	Tue Feb 19 13:12:30 2013 +0100
@@ -145,8 +145,8 @@
         if not field or field == 'all':
             field = 'text'
         qp = QueryParser(field)
-        res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all()
-        paginator = SearchPaginator(res, nb)
+        res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all().highlight()
+        paginator = Paginator(res, nb)
     else:
         frg_list = frg_list.order_by('pk').all()
         paginator = Paginator(frg_list, nb)
@@ -159,7 +159,6 @@
     url_pagination = reverse("all_fragments")
     if search:
         url_pagination = url_pagination + "?search=" + search
-        
 
     return render_to_response("egonomy_all_fragments.html",
                               {"search_fragment":True, 'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination},