Эх сурвалжийг харах

HUE-4971 [metadata] Support query filters as search terms

sample
type:TABLE
type:TABLE sampl
Romain Rigaux 9 жил өмнө
parent
commit
094d428

+ 3 - 2
desktop/libs/metadata/src/metadata/navigator_api.py

@@ -93,7 +93,8 @@ def search_entities_interactive(request):
   prefix = request.POST.get('prefix')
   offset = request.POST.get('offset', 0)
   limit = request.POST.get('limit', 25)
-  sources = json.loads(request.POST.get('sources')) or []
+  field_facets = json.loads(request.POST.get('field_facets') or '[]')
+  sources = json.loads(request.POST.get('sources') or '[]')
 
   fqs = []
   fq_type = []
@@ -111,7 +112,7 @@ def search_entities_interactive(request):
       query=query_s,
       limit=limit,
       offset=offset,
-      facetFields=None,
+      facetFields=field_facets,
       facetPrefix=prefix,
       facetRanges=None,
       filterQueries=fqs,

+ 14 - 3
desktop/libs/metadata/src/metadata/navigator_client.py

@@ -86,18 +86,28 @@ class NavigatorApi(object):
     try:
       params = self.__params
 
-      search_terms = [term.lower() for term in query_s.strip().split()]
+      search_terms = [term for term in query_s.strip().split()]
 
       query_clauses = []
+      user_filters = []
       for term in search_terms:
-        query_clauses.append('OR'.join(['(%s:*%s*)' % (field, term) for field in search_fields]))
+        if ':' not in term:
+          query_clauses.append('OR'.join(['(%s:*%s*)' % (field, term) for field in search_fields]))
+        else:
+          name, val = term.split(':')
+          if val:
+            user_filters.append(term) # e.g. type:VIEW ca
+      if user_filters and not query_clauses:
+        query_clauses.append('*') # e.g. type:VIEW
 
       filter_query = '(originalName:*.*)'
       if search_terms:
         filter_query = 'OR'.join(['(%s)' % clause for clause in query_clauses])
 
       type_filter_clause = 'OR'.join(['(%s:%s)' % ('type', entity_type) for entity_type in entity_types])
-      filter_query = '%sAND(%s)' % (filter_query, type_filter_clause)
+      if user_filters:
+        type_filter_clause = '(%s) AND (%s)' % ('OR'.join(user_filters), type_filter_clause)
+      filter_query = '%s AND (%s)' % (filter_query, type_filter_clause)
 
       params += (
         ('query', filter_query),
@@ -105,6 +115,7 @@ class NavigatorApi(object):
         ('limit', limit),
       )
 
+      LOG.info(params)
       response = self._root.get('entities', headers=self.__headers, params=params)
 
       return response