Преглед изворни кода

[search] Make sort optional

DB migration file
Remove score field
Romain Rigaux пре 12 година
родитељ
комит
55a2db2

+ 92 - 0
apps/search/src/search/migrations/0001_initial.py

@@ -0,0 +1,92 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+    
+    def forwards(self, orm):
+        
+        # Adding model 'Facet'
+        db.create_table('search_facet', (
+            ('data', self.gf('django.db.models.fields.TextField')()),
+            ('enabled', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+        ))
+        db.send_create_signal('search', ['Facet'])
+
+        # Adding model 'Result'
+        db.create_table('search_result', (
+            ('data', self.gf('django.db.models.fields.TextField')()),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+        ))
+        db.send_create_signal('search', ['Result'])
+
+        # Adding model 'Sorting'
+        db.create_table('search_sorting', (
+            ('data', self.gf('django.db.models.fields.TextField')()),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+        ))
+        db.send_create_signal('search', ['Sorting'])
+
+        # Adding model 'Core'
+        db.create_table('search_core', (
+            ('sorting', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['search.Sorting'])),
+            ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=40)),
+            ('facets', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['search.Facet'])),
+            ('enabled', self.gf('django.db.models.fields.BooleanField')(default=True, blank=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=100)),
+            ('result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['search.Result'])),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('properties', self.gf('django.db.models.fields.TextField')(default='[]')),
+        ))
+        db.send_create_signal('search', ['Core'])
+    
+    
+    def backwards(self, orm):
+        
+        # Deleting model 'Facet'
+        db.delete_table('search_facet')
+
+        # Deleting model 'Result'
+        db.delete_table('search_result')
+
+        # Deleting model 'Sorting'
+        db.delete_table('search_sorting')
+
+        # Deleting model 'Core'
+        db.delete_table('search_core')
+    
+    
+    models = {
+        'search.core': {
+            'Meta': {'object_name': 'Core'},
+            'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'facets': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['search.Facet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
+            'properties': ('django.db.models.fields.TextField', [], {'default': "'[]'"}),
+            'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['search.Result']"}),
+            'sorting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['search.Sorting']"})
+        },
+        'search.facet': {
+            'Meta': {'object_name': 'Facet'},
+            'data': ('django.db.models.fields.TextField', [], {}),
+            'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'search.result': {
+            'Meta': {'object_name': 'Result'},
+            'data': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'search.sorting': {
+            'Meta': {'object_name': 'Sorting'},
+            'data': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        }
+    }
+    
+    complete_apps = ['search']

+ 1 - 1
apps/search/src/search/models.py

@@ -377,7 +377,7 @@ class Core(models.Model):
 
   @property
   def fields(self):
-    return ['score'] + sorted([field.get('name') for field in self.fields_data])
+    return sorted([field.get('name') for field in self.fields_data])
 
   @property
   def fields_data(self):

+ 10 - 10
apps/search/src/search/templates/index.mako

@@ -85,24 +85,24 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
           % for group, count in macros.pairwise(fld['counts']):
             %if count > 0 and group != "" and found_value == "":
               % if fld['type'] == 'field':
-                <li><a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:${ group }&sort=${solr_query["sort"]}">${group}</a> <span class="counter">(${ count })</span></li>
+                <li><a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:${ group }${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}">${group}</a> <span class="counter">(${ count })</span></li>
               % endif
               % if fld['type'] == 'range':
-                <li><a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:[${ group } TO ${ str(int(group) + int(fld['gap']) - 1) }]&sort=${solr_query["sort"]}">${ group } (${ count })</a></li>
+                <li><a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:[${ group } TO ${ str(int(group) + int(fld['gap']) - 1) }]${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}">${ group } (${ count })</a></li>
               % endif
               % if fld['type'] == 'date':
-                <li class="dateFacetItem"><a href='?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:"${ group }"&sort=${solr_query["sort"]}'><span class="dateFacet">${ group }</span> (${ count })</a></li>
+                <li class="dateFacetItem"><a href='?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${ solr_query['fq'] }|${ fld['field'] }:"${ group }"${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}'><span class="dateFacet">${ group }</span> (${ count })</a></li>
               % endif
             %endif
             % if found_value != "":
               % if fld['type'] == 'field' and group == found_value:
-                <li><strong>${ group }</strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}&sort=${solr_query["sort"]}"><i class="icon-remove"></i></a></li>
+                <li><strong>${ group }</strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}"><i class="icon-remove"></i></a></li>
               %endif
               % if fld['type'] == 'range' and "[" + group + " TO " + str(int(group) + int(fld['gap']) - 1) + "]" == found_value:
-                <li><strong>${ group }</strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}&sort=${solr_query["sort"]}"><i class="icon-remove"></i></a></li>
+                <li><strong>${ group }</strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}"><i class="icon-remove"></i></a></li>
               %endif
               % if fld['type'] == 'date' and '"' + group + '"' == found_value:
-                <li><strong><span class="dateFacet">${group}</span></strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}&sort=${solr_query["sort"]}"><i class="icon-remove"></i></a></li>
+                <li><strong><span class="dateFacet">${group}</span></strong> <a href="?cores=${ current_cores }&query=${ solr_query['q'] }&fq=${'|'.join(remove_list)}${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}"><i class="icon-remove"></i></a></li>
               %endif
             %endif
           % endfor
@@ -213,15 +213,15 @@ ${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
           %>
           % if int(solr_query["start"]) > 0:
             <li>
-              <a title="${_('Beginning of List')}" href="?query=${solr_query["q"]}&fq=${solr_query["fq"]}&sort=${solr_query["sort"]}&rows=${solr_query["rows"]}&start=${beginning}">&larr; ${_('Beginning of List')}</a>
+              <a title="${_('Beginning of List')}" href="?query=${solr_query["q"]}&fq=${solr_query["fq"]}${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}&rows=${solr_query["rows"]}&start=${beginning}">&larr; ${_('Beginning of List')}</a>
             </li>
             <li>
-              <a title="Previous Page" href="?query=${solr_query["q"]}&fq=${solr_query["fq"]}&sort=${solr_query["sort"]}&rows=${solr_query["rows"]}&start=${previous}">${_('Previous Page')}</a>
+              <a title="Previous Page" href="?query=${solr_query["q"]}&fq=${solr_query["fq"]}${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}&rows=${solr_query["rows"]}&start=${previous}">${_('Previous Page')}</a>
             </li>
           % endif
           % if end_record < int(response["response"]["numFound"]):
             <li>
-              <a title="Next page" href="?query=${solr_query["q"]}&fq=${solr_query["fq"]}&sort=${solr_query["sort"]}&rows=${solr_query["rows"]}&start=${next}">${_('Next Page')}</a>
+              <a title="Next page" href="?query=${solr_query["q"]}&fq=${solr_query["fq"]}${solr_query.get("sort") and '&sort=' + solr_query.get("sort")}&rows=${solr_query["rows"]}&start=${next}">${_('Next Page')}</a>
             </li>
           % endif
         </ul>
@@ -293,7 +293,7 @@ ${ hue_core.result.get_extracode() | n,unicode }
       $.each(sortingData.fields, function (index, item) {
         $("<option>").attr("value", item.label).text(item.label).data("field", item.field).data("asc", item.asc).appendTo($(".sort-by"));
       });
-      var activeSorting = "${solr_query["sort"]}";
+      var activeSorting = "${solr_query.get("sort", "")}";
       if (activeSorting != "" && activeSorting.indexOf(" ") > -1) {
         $.each(sortingData.fields, function (index, item) {
           if (item.field == activeSorting.split(" ")[0] && item.asc == (activeSorting.split(" ")[1] == "asc")) {

+ 3 - 2
apps/search/src/search/views.py

@@ -56,7 +56,8 @@ def index(request):
     solr_query['core'] = core
     solr_query['q'] = search_form.cleaned_data['query']
     solr_query['fq'] = search_form.cleaned_data['fq']
-    solr_query['sort'] = search_form.cleaned_data['sort'] or 'score desc'
+    if search_form.cleaned_data['sort']:
+      solr_query['sort'] = search_form.cleaned_data['sort']
     solr_query['rows'] = search_form.cleaned_data['rows'] or 15
     solr_query['start'] = search_form.cleaned_data['start'] or 0
     solr_query['facets'] = search_form.cleaned_data['facets'] or 1
@@ -159,7 +160,7 @@ def augment_solr_response(response, facets):
         facet['counts'] = counts
         normalized_facets[get_facet_field_uuid(cat, 'date', facets)] = facet
 
-  for ordered_uuid in facets['order']:
+  for ordered_uuid in facets.get('order', []):
     try:
       augmented['normalized_facets'].append(normalized_facets[ordered_uuid])
     except: