'Execute a search against one or more indices to get the resultset.
`query` must be a Search object, a Query object, or a custom
dictionary of search parameters using the query DSL to be passed
directly.'

def search(self, query, indices=None, doc_types=None, model=None, scan=False, headers=None, **query_params):

    if isinstance(query, Search):
        search = query
    elif isinstance(query, (Query, dict)):
        search = Search(query)
    else:
        raise InvalidQuery('search()    must    be    supplied    with    a    Search    or    Query    object,    or    a    dict')
    if scan:
        query_params.setdefault('search_type', 'scan')
        query_params.setdefault('scroll', '10m')
    return ResultSet(self, search, indices=indices, doc_types=doc_types, model=model, query_params=query_params, headers=headers)
