'Query the cloudsearch API. _update parameter allows for supposed
easy memoization at later date.
Example result set:
{u\'facets\': {u\'reddit\': {u\'constraints\':
[{u\'count\': 114, u\'value\': u\'politics\'},
{u\'count\': 42, u\'value\': u\'atheism\'},
{u\'count\': 27, u\'value\': u\'wtf\'},
{u\'count\': 19, u\'value\': u\'gaming\'},
{u\'count\': 12, u\'value\': u\'bestof\'},
{u\'count\': 12, u\'value\': u\'tf2\'},
{u\'count\': 11, u\'value\': u\'AdviceAnimals\'},
{u\'count\': 9, u\'value\': u\'todayilearned\'},
{u\'count\': 9, u\'value\': u\'pics\'},
{u\'count\': 9, u\'value\': u\'funny\'}]}},
u\'hits\': {u\'found\': 399,
u\'hit\': [{u\'id\': u\'t3_11111\'},
{u\'id\': u\'t3_22222\'},
{u\'id\': u\'t3_33333\'},
{u\'id\': u\'t3_44444\'},
u\'start\': 0},
u\'info\': {u\'cpu-time-ms\': 10,
u\'messages\': [{u\'code\': u\'CS-InvalidFieldOrRankAliasInRankParameter\',
u\'message\': u"Unable to create score object for rank \'-hot\'",
u\'severity\': u\'warning\'}],
u\'rid\': u\'<hash>\',
u\'time-ms\': 9},
u\'match-expr\': u"(label \'my query\')",
u\'rank\': u\'-text_relevance\'}'

@classmethod
def _run_cached(cls, query, bq, sort='relevance', rank_expressions=None, faceting=None, start=0, num=1000, _update=False):

    try:
        response = basic_query(query=query, bq=bq, size=num, start=start, rank=sort, rank_expressions=rank_expressions, search_api=cls.search_api, faceting=faceting, record_stats=True)
    except (SearchHTTPError, SearchError) as e:
        g.log.error('Search    Error:    %r', e)
        raise
    warnings = response['info'].get('messages', [])
    for warning in warnings:
        g.log.warning(('%(code)s    (%(severity)s):    %(message)s' % warning))
    hits = response['hits']['found']
    docs = [doc['id'] for doc in response['hits']['hit']]
    facets = response.get('facets', {})
    for facet in facets.keys():
        values = facets[facet]['constraints']
        facets[facet] = values
    results = Results(docs, hits, facets)
    return results
