diff --git a/api/handlers/dataexplorerhandler.py b/api/handlers/dataexplorerhandler.py index 7c93f4cbf28060035ace6e05b6772886878f54c3..ce76e26da0d48314fad2bf018b914f74db636e35 100644 --- a/api/handlers/dataexplorerhandler.py +++ b/api/handlers/dataexplorerhandler.py @@ -487,7 +487,7 @@ class DataExplorerHandler(base.RequestHandler): "field" : return_type + "._id", "precision_threshold": 100000 } - } + } } } @@ -506,7 +506,7 @@ class DataExplorerHandler(base.RequestHandler): size = self.search_size(return_type) body = self._construct_query(return_type, search_string, filters, size) - + body['aggs']['by_container'].pop('aggs') body['_source'] = [return_type + "._id"] @@ -519,11 +519,11 @@ class DataExplorerHandler(base.RequestHandler): for result in results: nodes.append({'level': return_type, '_id': result['key']}) return {'nodes':nodes} - + def get_file_nodes(self, return_type, filters, search_string): query = self._construct_file_query(return_type, filters, search_string)['query'] - + nodes = [] results = helpers.scan(client=config.es, query={'query': query}, scroll='5m', size=1000, index='data_explorer', doc_type='flywheel', _source=[return_type+'._id']) log.debug(results) @@ -562,12 +562,28 @@ class DataExplorerHandler(base.RequestHandler): @require_login def search(self): return_type, filters, search_string = self._parse_request() + + # Set size, if all figure out max for return type. + # This could get more efficient (and more exact) if we build the query + # first and allow search_size() to take a query, but leave for now unless + # problems arise. size = self.request.params.get('size', 100) + if size == 'all': + size = self.search_size(return_type) + elif not isinstance(size, int): + self.abort(400, 'Size must be an int or "all".') + results = self._run_query(self._construct_query(return_type, search_string, filters, size), return_type) - response = {'results': results} - if self.is_true('facets'): - response['facets'] = self.get_facets() - return response + + if self.is_true('simple'): + #return a list of the results' `_source` key only + return [x['_source'] for x in results] + + else: + response = {'results': results} + if self.is_true('facets'): + response['facets'] = self.get_facets() + return response ## CONSTRUCTING QUERIES ##