Browse Source

[search] Build all facets query

Romain Rigaux 12 years ago
parent
commit
470eb32

+ 25 - 15
apps/search/src/search/models.py

@@ -40,7 +40,7 @@ class DateFacet(object): pass
 
 
 
 
 class Facet(models.Model):
 class Facet(models.Model):
-  _ATTRIBUTES = ['properties', 'fields', 'range', 'date'] # Metadata of the data, only 'fields' used currently
+  _ATTRIBUTES = ['properties', 'fields', 'range', 'date']
   enabled = models.BooleanField(default=True)
   enabled = models.BooleanField(default=True)
   data = models.TextField()
   data = models.TextField()
 
 
@@ -64,6 +64,7 @@ class Facet(models.Model):
 
 
     self.data = json.dumps(data_dict)
     self.data = json.dumps(data_dict)
 
 
+
   def get_query_params(self):
   def get_query_params(self):
     data_dict = json.loads(self.data)
     data_dict = json.loads(self.data)
 
 
@@ -74,23 +75,32 @@ class Facet(models.Model):
         ('facet.sort', 'count'),
         ('facet.sort', 'count'),
     )
     )
 
 
-    if 'fields' in data_dict and data_dict['fields']:
+    if data_dict.get('fields'):
       field_facets = tuple([('facet.field', field_facet['field']) for field_facet in data_dict['fields']])
       field_facets = tuple([('facet.field', field_facet['field']) for field_facet in data_dict['fields']])
       params += field_facets
       params += field_facets
 
 
+    if data_dict.get('ranges'):
+      for field_facet in data_dict['ranges']:      
+        range_facets = tuple([
+                           ('facet.range', field_facet['field']),
+                           ('f.%s.facet.range.start' % field_facet['field'], field_facet['start']),
+                           ('f.%s.facet.range.end' % field_facet['field'], field_facet['end']),
+                           ('f.%s.facet.range.gap' % field_facet['field'], field_facet['gap']),]
+                        )
+        params += range_facets      
+ 
+    if data_dict.get('dates'):
+      for field_facet in data_dict['dates']:      
+        range_facets = tuple([
+                           ('facet.date', field_facet['field']),
+                           ('f.%s.facet.date.start' % field_facet['field'], 'NOW/DAY-305DAYS'),
+                           ('f.%s.facet.date.end' % field_facet['field'], 'NOW/DAY+1DAY'),
+                           ('f.%s.facet.date.gap' % field_facet['field'], '+%sDAY' % field_facet['gap']),]
+                        )
+        params += range_facets
+ 
     return params
     return params
 
 
-# e.g.
-#                ('facet.range', 'retweet_count'),
-#                ('f.retweet_count.facet.range.start', '0'),
-#                ('f.retweet_count.facet.range.end', '100'),
-#                ('f.retweet_count.facet.range.gap', '10'),
-#
-#                ('facet.date', 'created_at'),
-#                ('facet.date.start', 'NOW/DAY-305DAYS'),
-#                ('facet.date.end', 'NOW/DAY+1DAY'),
-#                ('facet.date.gap', '+1DAY'),
-
 
 
 class Result(models.Model):
 class Result(models.Model):
   _META_TEMPLATE_ATTRS = ['template', 'highlighted_fields', 'css']
   _META_TEMPLATE_ATTRS = ['template', 'highlighted_fields', 'css']
@@ -147,9 +157,9 @@ class Query(object): pass
 
 
 
 
 def temp_fixture_hook():
 def temp_fixture_hook():
-  #Core.objects.all().delete()
+  Core.objects.all().delete()
   if not Core.objects.exists():
   if not Core.objects.exists():
-    facets = Facet.objects.create(data=json.dumps({'fields': ['id'], 'ranges': [], 'dates': []}))
+    facets = Facet.objects.create(data=json.dumps({'ranges': [{"type":"range","field":"price","start":"1","end":"400","gap":"100"}], 'fields': [{"type":"field","field":"id"}], 'dates': [{"type":"date","field":"last_modified","start":"02-13-2013","end":"02-19-2013","gap":"1"}]}))
     result = Result.objects.create()
     result = Result.objects.create()
     sorting = Sorting.objects.create()
     sorting = Sorting.objects.create()
 
 

+ 1 - 1
apps/search/src/search/templates/admin_core_facets.mako

@@ -134,7 +134,7 @@ ${ commonheader(_('Search'), "search", user) | n,unicode }
   var Facet = function (type, field, start, end, gap) {
   var Facet = function (type, field, start, end, gap) {
     return {
     return {
       type: type,
       type: type,
-      field:field,
+      field: field,
       start: start,
       start: start,
       end: end,
       end: end,
       gap: gap
       gap: gap