Full search of games resource, supporting all search fields
        available in API
        http://www.giantbomb.com/api/documentation#toc-0-17

        :param filter_by: dict
        :param return_fields: tuple
        :param sort_by: string
        :param desc: bool
        :param limit: int
        :param offset: int
        :return: pybomb.clients.Response

def search(
        self,
        filter_by,
        return_fields=None,
        sort_by=None,
        desc=True,
        limit=None,
        offset=None,
    ):
        """
        Full search of games resource, supporting all search fields
        available in API
        http://www.giantbomb.com/api/documentation#toc-0-17

        :param filter_by: dict
        :param return_fields: tuple
        :param sort_by: string
        :param desc: bool
        :param limit: int
        :param offset: int
        :return: pybomb.clients.Response
        """
        self._validate_filter_fields(filter_by)
        search_filter = self._create_search_filter(filter_by)

        search_params = {"filter": search_filter}

        if return_fields is not None:
            self._validate_return_fields(return_fields)
            field_list = ",".join(return_fields)

            search_params["field_list"] = field_list

        if sort_by is not None:
            self._validate_sort_field(sort_by)

            if desc:
                direction = self.SORT_ORDER_DESCENDING
            else:
                direction = self.SORT_ORDER_ASCENDING

            search_params["sort"] = "{0}:{1}".format(sort_by, direction)

        if limit is not None:
            search_params["limit"] = int(limit)

        if offset is not None:
            search_params["offset"] = int(offset)

        response = self._query(search_params)

        return response