code: def _clone(self):
          
          s = super(Search, self)._clone()
  
          s._response_class = self._response_class
          s._sort = self._sort[:]
          s._source = copy.copy(self._source) \
              if self._source is not None else None
          s._highlight = self._highlight.copy()
          s._highlight_opts = self._highlight_opts.copy()
          s._suggest = self._suggest.copy()
          s._script_fields = self._script_fields.copy()
          for x in ('query', 'post_filter'):
              getattr(s, x)._proxied = getattr(self, x)._proxied
  
          # copy top-level bucket definitions
          if self.aggs._params.get('aggs'):
              s.aggs._params = {'aggs': self.aggs._params['aggs'].copy()}
          return s
docs: Return a clone of the current search request. Performs a shallow copy
          of all the underlying objects. Used internally by most state modifying
          APIs.