'Asynchronously searches the index for documents matching the query.
Identical to search() except that it returns a future. Call
get_result() on the return value to block on the call and get its result.'

@datastore_rpc._positional(2)
def search_async(self, query, deadline=None, **kwargs):

    if isinstance(query, basestring):
        query = Query(query_string=query)
    request = self._NewSearchRequest(query, deadline, **kwargs)
    response = search_service_pb.SearchResponse()
    def hook():
        _CheckStatus(response.status())
        cursor = None
        if query.options:
            cursor = query.options.cursor
        return self._NewSearchResults(response, cursor)
    return _RpcOperationFuture('Search', request, response, deadline, hook)
