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