def search(self, q=None, advanced=False, limit=None, info=False, reset_query=True):
        """Execute a search and return the results, up to the ``SEARCH_LIMIT``.

        Arguments:
            q (str): The query to execute. **Default:** The current helper-formed query, if any.
                    There must be some query to execute.
            advanced (bool): Whether to treat ``q`` as a basic or advanced query.
                Has no effect if a query is not supplied in ``q``.
                **Default:** ``False``
            limit (int): The maximum number of results to return.
                    The max for this argument is the ``SEARCH_LIMIT`` imposed by Globus Search.
                    **Default:** ``SEARCH_LIMIT`` for advanced queries, 10 for basic queries.
            info (bool): If ``False``, search will return a list of the results.
                    If ``True``, search will return a tuple containing the results list
                    and other information about the query.
                    **Default:** ``False``.
            reset_query (bool): If ``True``, will destroy the current query after execution
                    and start a fresh one.
                    If ``False``, will keep the current query set.
                    Has no effect if a query is supplied in ``q``.
                    **Default:** ``True``.

        Returns:
            If ``info`` is ``False``, *list*: The search results.
            If ``info`` is ``True``, *tuple*: The search results,
            and a dictionary of query information.

        Note:
            If a query is specified in ``q``, the current, helper-built query (if any)
            will not be used in the search or modified.
        """
        # If q not specified, use internal, helper-built query
        if q is None:
            res = self._ex_search(info=info, limit=limit)
            if reset_query:
                self.reset_query()
            return res
        # If q was specified, run a totally independent query with a new SearchHelper
        # Init SearchHelper with query, then call .search(), which will use it
        # ._ex_search() not canonical way to perform single-statement search, so not used
        # reset_query is False to skip the unnecessary query reset - SH not needed after search
        else:
            return SearchHelper(index=self.index, search_client=self.__search_client, q=q,
                                advanced=advanced).search(info=info, limit=limit,
                                                          reset_query=False)