(self, es_query, es_type=None)
return es_results
Run a more advanced POST based ES query

        Returns the raw query json back, or None if there's an error
Run a more advanced POST based ES query
Run a more advanced POST based ES query
def run_query(self, es_query, es_type=None):
        """
        Run a more advanced POST based ES query

        Returns the raw query json back, or None if there's an error
        """

        logger.info("ESlog: [%s.%s] ESquery: %s" % (self.__class__.__name__, self.domain, json.dumps(es_query)))
        if 'fields' in es_query or 'script_fields' in es_query:
            #nasty hack to add domain field to query that does specific fields.
            #do nothing if there's no field query because we get everything
            fields = es_query.get('fields', [])
            fields.append('domain')
            es_query['fields'] = fields

        try:
            es_results = self.es_interface.search(self.es_alias, es_type, body=es_query)
            report_and_fail_on_shard_failures(es_results)
        except ElasticsearchException as e:
            if 'query_string' in es_query.get('query', {}).get('filtered', {}).get('query', {}):
                # the error may have been caused by a bad query string
                # re-run with no query string to check
                querystring = es_query['query']['filtered']['query']['query_string']['query']
                new_query = es_query
                new_query['query']['filtered']['query'] = {"match_all": {}}
                new_results = self.run_query(new_query)
                if new_results:
                    # the request succeeded without that query string
                    # an error with a blank query will return None
                    raise ESUserError("Error with elasticsearch query: %s" %
                        querystring)

            msg = "Error in elasticsearch query [%s]: %s\nquery: %s" % (self.es_alias, str(e), es_query)
            raise ESError(msg)

        hits = []
        for res in es_results['hits']['hits']:
            if '_source' in res:
                res_domain = res['_source'].get('domain', None)
            elif 'fields' in res:
                res['fields'] = flatten_field_dict(res)
                res_domain = res['fields'].get('domain', None)

            # security check
            if res_domain == self.domain:
                hits.append(res)
            else:
                logger.info("Requester domain %s does not match result domain %s" % (
                    self.domain, res_domain))
        es_results['hits']['hits'] = hits
        return es_results
def run_query ( self , es_query , es_type = None ) : logger . info ( "ESlog: [%s.%s] ESquery: %s" % ( self . __class__ . __name__ , self . domain , json . dumps ( es_query ) ) ) if 'fields' in es_query or 'script_fields' in es_query : #nasty hack to add domain field to query that does specific fields. #do nothing if there's no field query because we get everything fields = es_query . get ( 'fields' , [ ] ) fields . append ( 'domain' ) es_query [ 'fields' ] = fields try : es_results = self . es_interface . search ( self . es_alias , es_type , body = es_query ) report_and_fail_on_shard_failures ( es_results ) except ElasticsearchException as e : if 'query_string' in es_query . get ( 'query' , { } ) . get ( 'filtered' , { } ) . get ( 'query' , { } ) : # the error may have been caused by a bad query string # re-run with no query string to check querystring = es_query [ 'query' ] [ 'filtered' ] [ 'query' ] [ 'query_string' ] [ 'query' ] new_query = es_query new_query [ 'query' ] [ 'filtered' ] [ 'query' ] = { "match_all" : { } } new_results = self . run_query ( new_query ) if new_results : # the request succeeded without that query string # an error with a blank query will return None raise ESUserError ( "Error with elasticsearch query: %s" % querystring ) msg = "Error in elasticsearch query [%s]: %s\nquery: %s" % ( self . es_alias , str ( e ) , es_query ) raise ESError ( msg ) hits = [ ] for res in es_results [ 'hits' ] [ 'hits' ] : if '_source' in res : res_domain = res [ '_source' ] . get ( 'domain' , None ) elif 'fields' in res : res [ 'fields' ] = flatten_field_dict ( res ) res_domain = res [ 'fields' ] . get ( 'domain' , None ) # security check if res_domain == self . domain : hits . append ( res ) else : logger . info ( "Requester domain %s does not match result domain %s" % ( self . domain , res_domain ) ) es_results [ 'hits' ] [ 'hits' ] = hits return es_results