Explorar o código

HUE-2683 [search] Make type of metric configurable

Romain Rigaux %!s(int64=10) %!d(string=hai) anos
pai
achega
375818c

+ 10 - 0
apps/search/src/search/static/search/js/search.ko.js

@@ -483,6 +483,11 @@ var Collection = function (vm, collection) {
         vm.search();
       });
     }
+    if (facet.properties.function) {
+      facet.properties.function.subscribe(function () {
+        vm.search();
+      });
+    }
   });
   self.template.rows.subscribe(function() {
     vm.search();
@@ -518,6 +523,11 @@ var Collection = function (vm, collection) {
               vm.search();
             });
           }
+          if (facet.properties.function) {
+            facet.properties.function.subscribe(function () {
+              vm.search();
+            });
+          }
           self.facets.push(facet);
           vm.search();
         } else {

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

@@ -151,7 +151,7 @@ ${ commonheader(_('Search'), "search", user, "80px") | n,unicode }
                               'stop': function(event, ui){$('.card-body').slideDown('fast', function(){$(window).scrollTop(lastWindowScrollPosition)});}}}"
          title="${_('Counter')}" rel="tooltip" data-placement="top">
          <a data-bind="style: { cursor: $root.availableDraggableNumbers() ? 'move' : 'default' }">
-                       <i class="fa fa-calculator"></i>
+                       <i class="fa fa-font"></i>
          </a>
     </div>
 
@@ -1086,19 +1086,19 @@ ${ dashboard.layout_skeleton() }
   <div class="row-fluid" data-bind="with: $root.getFacetFromQuery(id())">
     <div data-bind="visible: $root.isEditing, with: $root.collection.getFacetById($parent.id())" style="margin-bottom: 20px">
       <span class="facet-field-label">${ _('Metric') }</span>
-      <select>
-        <option value="0" selected="selected" label="Count">Count</option>
-        <option value="1" label="Average">Average</option>
-        <option value="2" label="Sum">Sum</option>
-        <option value="3" label="Min">Min</option>
-        <option value="4" label="Max">Max</option>
-        <option value="5" label="Standard Deviation">Standard Deviation</option>
-        <option value="6" label="Unique count">Unique count</option>
-        <option value="7" label="Percentiles">Percentiles</option>
+      <select data-bind="value: properties.function">
+        <option value="unique" selected="selected" label="${ _('Unique Count') }">${ _('Unique Count') }</option>
+        <option value="avg" label="${ _('Average') }">${ _('Average') }</option>
+        <option value="sum" label="${ _('Sum') }">${ _('Sum') }</option>
+        <option value="min" label="${ _('Min') }">${ _('Min') }</option>
+        <option value="max" label="${ _('Max') }">${ _('Max') }</option>
+        <option value="sumsq" label="${ _('Sum of square') }">${ _('Sum of square') }</option>
+        <option value="percentile" label="${ _('Percentiles') }">${ _('Percentiles') }</option>
       </select>
     </div>
 
     <span data-bind="text: 'max', visible: ! $root.isEditing()"></span>
+    </br>
     <span class="big-counter" data-bind="text: counts"></span>
   </div>
   <!-- /ko -->

+ 1 - 0
apps/search/src/search/views.py

@@ -486,6 +486,7 @@ def _create_facet(collection, user, facet_id, facet_label, facet_field, widget_t
     facet_type = 'pivot'
   elif widget_type == 'hit-widget':
     facet_type = 'function'
+    properties['function'] = 'unique'
   else:
     solr_api = SolrApi(SOLR_URL.get(), user)
     range_properties = _new_range_facet(solr_api, collection, facet_field, widget_type)

+ 10 - 1
desktop/libs/libsolr/src/libsolr/api.py

@@ -161,8 +161,17 @@ class SolrApi(object):
               ('facet.field', '{!key=%(key)s ex=%(id)s f.%(field)s.facet.limit=%(limit)s f.%(field)s.facet.mincount=%(mincount)s}%(field)s' % keys),
           )
         elif facet['type'] == 'function':
+          props = {
+              'function': facet['properties']['function'],
+              'key': '%(field)s-%(id)s' % facet
+          }
+          props.update(facet)
+          if facet['properties']['function'] == 'percentile':
+            props['formula'] = '%(function)s(%(field)s,25,50,75,90,99)' % props
+          else:
+            props['formula'] = '%(function)s(%(field)s)' % props          
           params += (
-              ('json.facet', "{%(field)s-%(id)s: 'avg(%(field)s)'}" % facet),
+              ('json.facet', "{%(key)s: '%(formula)s'}" % props),
           )        
         elif facet['type'] == 'pivot':
           if facet['properties']['facets'] or facet['widgetType'] == 'map-widget':