From 107dd8dac2c222d2ef1af7de694a57722cb31062 Mon Sep 17 00:00:00 2001 From: Megan Henning <meganhenning@flywheel.io> Date: Thu, 24 Aug 2017 12:51:22 -0500 Subject: [PATCH] Add info_exists key, fix count bug --- api/handlers/dataexplorerhandler.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/api/handlers/dataexplorerhandler.py b/api/handlers/dataexplorerhandler.py index 4d37690f..b3ed416d 100644 --- a/api/handlers/dataexplorerhandler.py +++ b/api/handlers/dataexplorerhandler.py @@ -453,7 +453,7 @@ class DataExplorerHandler(base.RequestHandler): return_type, filters, search_string = self._parse_request(request_type='facet') facets_q = copy.deepcopy(FACET_QUERY) - facets_q['query'] = self._construct_query(return_type, search_string, filters)['query'] + facets_q['query'] = self._construct_query(None, search_string, filters)['query'] # if the query comes back with a return_type agg, remove it facets_q['query'].pop('aggs', None) @@ -584,6 +584,13 @@ class DataExplorerHandler(base.RequestHandler): } } + if return_type == 'file': + query['script_fields'] = { + "info_exists" : { + "script" : "(params['_source'].containsKey('file') && params['_source']['file'].containsKey('info') && !params['_source']['file']['info'].empty)" + } + } + # Add search_string to "match on _all fields" query, otherwise remove unneeded logic if search_string: query['query']['bool']['must']['match']['_all'] = search_string @@ -610,7 +617,7 @@ class DataExplorerHandler(base.RequestHandler): def _process_results(self, results, result_type): if result_type in EXACT_CONTAINERS: - return self._process_exact_results(results) + return self._process_exact_results(results, result_type) else: containers = results['aggregations']['by_container']['buckets'] modified_results = [] @@ -618,8 +625,17 @@ class DataExplorerHandler(base.RequestHandler): modified_results.append(c['by_top_hit']['hits']['hits'][0]) return modified_results - def _process_exact_results(self, results): - return results['hits']['hits'] + def _process_exact_results(self, results, result_type): + results = results['hits']['hits'] + if result_type == 'file': + + # Note: At some point this would be better suited + # as an indexed field rather than scripted on the fly + for r in results: + fields = r.pop('fields', {}) + r['_source']['file']['info_exists'] = fields.get('info_exists')[0] + + return results -- GitLab