瀏覽代碼

HUE-2981 [search] Provide computed subcounts into the tree data

Romain Rigaux 9 年之前
父節點
當前提交
453006d0e8
共有 2 個文件被更改,包括 27 次插入23 次删除
  1. 1 1
      apps/search/src/search/templates/common_search.mako
  2. 26 22
      desktop/libs/libsolr/src/libsolr/api.py

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

@@ -648,7 +648,7 @@ ${ dashboard.layout_skeleton() }
   </div>
   </div>
   <!-- /ko -->
   <!-- /ko -->
 
 
-  <div class="filter-box" data-bind="visible: $root.isEditing() && properties.facets().length < 2" style="opacity: 0.7">
+  <div class="filter-box" data-bind="visible: $root.isEditing() && properties.facets().length < 5" style="opacity: 0.7">
     <div class="title" style="border: 1px dashed #d8d8d8; border-bottom: none">
     <div class="title" style="border: 1px dashed #d8d8d8; border-bottom: none">
       <a data-bind="visible: ko.toJSON(properties.facets_form.field), click: $root.collection.addPivotFacetValue" class="pull-right" href="javascript:void(0)">
       <a data-bind="visible: ko.toJSON(properties.facets_form.field), click: $root.collection.addPivotFacetValue" class="pull-right" href="javascript:void(0)">
         <i class="fa fa-plus"></i> ${ _('Add') }
         <i class="fa fa-plus"></i> ${ _('Add') }

+ 26 - 22
desktop/libs/libsolr/src/libsolr/api.py

@@ -166,29 +166,8 @@ class SolrApi(object):
             if facet['properties']['canRange'] and not facet['properties']['isDate']:
             if facet['properties']['canRange'] and not facet['properties']['isDate']:
               del _f['mincount'] # Numeric fields do not support
               del _f['mincount'] # Numeric fields do not support
 
 
-          def _nd(_f, facets, dim):
-            facet = facets[0]
-            f_name = 'd%s' % dim
-            if facet['aggregate'] == 'count':
-              _f['facet'] = {
-                  f_name: {
-                      'type': 'terms',
-                      'field': '%(field)s' % facet,
-                      'limit': int(facet.get('limit', 10)),
-                      'mincount': int(facet['mincount'])
-                  }
-              }
-              if len(facets) > 1: # Get n+1 dimension
-                _nd(_f['facet'][f_name], facets[1:], dim+1)
-            else:
-              _f['facet'] = {
-                  f_name: self._get_aggregate_function(facet)
-              }
-#               _f['sort'] = {f_name: facet['properties']['sort']}
-              # domain = '-d2:NaN' # Solr 6.4
-
           if facet['properties']['facets']:
           if facet['properties']['facets']:
-            _nd(_f, facet['properties']['facets'], 2)
+            self._n_facet_dimension(facet, _f, facet['properties']['facets'], 2)
 
 
           json_facets[facet['id']] = _f
           json_facets[facet['id']] = _f
         elif facet['type'] == 'function':
         elif facet['type'] == 'function':
@@ -264,6 +243,31 @@ class SolrApi(object):
     return self._get_json(response)
     return self._get_json(response)
 
 
 
 
+  def _n_facet_dimension(self, widget, _f, facets, dim):
+    facet = facets[0]
+    f_name = 'd%s' % dim
+
+    if facet['aggregate'] == 'count':
+      _f['facet'] = {
+          f_name: {
+              'type': 'terms',
+              'field': '%(field)s' % facet,
+              'limit': int(facet.get('limit', 10)),
+              'mincount': int(facet['mincount'])
+          }
+      }
+      if widget['widgetType'] == 'tree2-widget' and facets[-1]['aggregate'] != 'count':
+        _f['subcount'] = self._get_aggregate_function(facets[-1])
+      if len(facets) > 1: # Get n+1 dimension
+        self._n_facet_dimension(widget, _f['facet'][f_name], facets[1:], dim+1)
+    else:
+      _f['facet'] = {
+          f_name: self._get_aggregate_function(facet)
+      }
+#               _f['sort'] = {f_name: facet['properties']['sort']}
+      # domain = '-d2:NaN' # Solr 6.4
+
+
   def suggest(self, collection, query):
   def suggest(self, collection, query):
     try:
     try:
       params = self._get_params() + (
       params = self._get_params() + (