public function scroll($scrollId, array $options = [], array $filters = [])
    {
        $options['httpParams'] = [':scrollId' => $scrollId];

        $data = [];

        if (!$scrollId) {
            throw new \Exception('Collection.scroll: scrollId is required');
        }

        $response = $this->kuzzle->query(
            $this->kuzzle->buildQueryArgs('document', 'scroll'),
            $data,
            $options
        );

        $response['result']['hits'] = array_map(function ($document) {
            return new Document($this, $document['_id'], $document['_source'], $document['_meta']);
        }, $response['result']['hits']);


        if (array_key_exists('_scroll_id', $response['result'])) {
            $options['scrollId'] = $response['result']['_scroll_id'];
        }

        return new SearchResult(
            $this,
            $response['result']['total'],
            $response['result']['hits'],
            array_key_exists('aggregations', $response['result']) ? $response['result']['aggregations'] : [],
            $options,
            $filters,
            array_key_exists('previous', $options) ? $options['previous'] : null
        );
    }