Bladeren bron

HUE-3294 [home] Combine document and metadata search in general search

Romain Rigaux 9 jaren geleden
bovenliggende
commit
3a271ce

+ 3 - 3
desktop/core/src/desktop/api2.py

@@ -118,7 +118,7 @@ def search_documents(request):
   return JsonResponse(response)
   return JsonResponse(response)
 
 
 
 
-def _search(user, perms='both', include_history=False, include_trashed=False, include_managed=False, search_text=None):
+def _search(user, perms='both', include_history=False, include_trashed=False, include_managed=False, search_text=None, limit=25):
   response = {
   response = {
     'documents': []
     'documents': []
   }
   }
@@ -137,7 +137,6 @@ def _search(user, perms='both', include_history=False, include_trashed=False, in
   flatten = True
   flatten = True
 
 
   page = 1
   page = 1
-  limit = 25
 
 
   # Refine results
   # Refine results
   response.update(__filter_documents(type_filters, sort, search_text, queryset=documents, flatten=flatten))
   response.update(__filter_documents(type_filters, sort, search_text, queryset=documents, flatten=flatten))
@@ -554,7 +553,8 @@ def search_entities_interactive(request):
 
 
   if 'documents' in sources:
   if 'documents' in sources:
     search_text = json.loads(request.POST.get('query_s', ''))
     search_text = json.loads(request.POST.get('query_s', ''))
-    entities = _search(user=request.user, search_text=search_text)
+    limit = int(request.POST.get('limit', 25))
+    entities = _search(user=request.user, search_text=search_text, limit=limit)
     response = {
     response = {
       'results': [{'hue_name': e.name, 'hue_description': e.description, 'type': 'HUE', 'originalName': e.name} for e in entities['documents']],
       'results': [{'hue_name': e.name, 'hue_description': e.description, 'type': 'HUE', 'originalName': e.name} for e in entities['documents']],
       'count': len(entities['documents']),
       'count': len(entities['documents']),

+ 18 - 8
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -1393,15 +1393,25 @@ var ApiHelper = (function () {
 
 
   ApiHelper.prototype.globalSearchAutocomplete = function (options) {
   ApiHelper.prototype.globalSearchAutocomplete = function (options) {
     var self = this;
     var self = this;
-    $.post('/desktop/api/search/entities_interactive', {
-      query_s: ko.mapping.toJSON(options.query),
-      limit: 10,
-      sources: '["sql"]' // TODO: Add all global search types
-    }).done(function (data) {
-      if (data.status === 0 && !self.successResponseIsError(data)) {
-        options.successCallback(data);
+
+    $.when.apply($, [
+      $.post('/desktop/api/search/entities_interactive', {
+        query_s: ko.mapping.toJSON(options.query),
+        limit: 5,
+        sources: '["*"]'
+      }),
+      $.post('/desktop/api/search/entities_interactive', {
+          query_s: ko.mapping.toJSON(options.query),
+          limit: 5,
+          sources: '["documents"]'
+        })
+      ]
+    ).done(function (metadata, documents) {
+      if (metadata[0].status === 0 && !self.successResponseIsError(metadata[0])) {
+    	metadata[0].resultsHuedocuments = documents[0].results;
+        options.successCallback(metadata[0]);
       } else {
       } else {
-        self.assistErrorCallback(options)(data);
+        self.assistErrorCallback(options)(metadata);
       }
       }
     }).fail(self.assistErrorCallback(options));
     }).fail(self.assistErrorCallback(options));
   };
   };

+ 10 - 0
desktop/core/src/desktop/templates/responsive.mako

@@ -453,6 +453,16 @@ ${ assist.assistPanel() }
             successCallback: function (data) {
             successCallback: function (data) {
               var values = [];
               var values = [];
               var facetPartialRe = new RegExp(partial.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); // Protect for 'tags:*axe'
               var facetPartialRe = new RegExp(partial.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); // Protect for 'tags:*axe'
+
+              if (typeof data.resultsHuedocuments !== 'undefined') {
+                data.resultsHuedocuments.forEach(function (result) {
+                  values.push({ data: { label: result.hue_name, icon: SEARCH_TYPE_ICONS[result.type],  description: result.hue_description }, value: beforePartial + result.originalName });
+                });
+              }
+              if (values.length > 0) {
+                values.push({ divider: true });
+              }
+
               if (isFacet && typeof data.facets !== 'undefined') { // Is typed facet, e.g. type: type:bla
               if (isFacet && typeof data.facets !== 'undefined') { // Is typed facet, e.g. type: type:bla
                 var facetInQuery = facetMatch[1];
                 var facetInQuery = facetMatch[1];
                 if (typeof data.facets[facetInQuery] !== 'undefined') {
                 if (typeof data.facets[facetInQuery] !== 'undefined') {

+ 0 - 1
desktop/libs/metadata/src/metadata/navigator_api.py

@@ -115,7 +115,6 @@ def search_entities_interactive(request):
   field_facets = json.loads(request.POST.get('field_facets') or '[]')
   field_facets = json.loads(request.POST.get('field_facets') or '[]')
   sources = json.loads(request.POST.get('sources') or '[]')
   sources = json.loads(request.POST.get('sources') or '[]')
 
 
-
   f = {
   f = {
       "outputFormat" : {
       "outputFormat" : {
         "type" : "dynamic"
         "type" : "dynamic"