Asset search API.

        Possible kwargs:
           * threshold: int (default = 0)
           * page_no: int (default = 1)
           * page_size: int (default = 100)
           * sort_fields: list (default = [])
           * asset_types: list (default = [])
           * include_public: bool (default = True)
           * include_data_sources: bool (default = True)

def loose_search(self, asset_manager_id, query='', **kwargs):
        """
        Asset search API.

        Possible kwargs:
           * threshold: int (default = 0)
           * page_no: int (default = 1)
           * page_size: int (default = 100)
           * sort_fields: list (default = [])
           * asset_types: list (default = [])
           * include_public: bool (default = True)
           * include_data_sources: bool (default = True)
        """
        self.logger.info('Asset Search - Asset Manager: %s', asset_manager_id)
        url = '{endpoint}/assets/search/{asset_manager_id}'.format(
            asset_manager_id=asset_manager_id,
            endpoint=self.endpoint,
        )
        params = {'query': query}
        for k, v in kwargs.items():
            if not isinstance(v, str) and isinstance(v, Iterable):
                v = ','.join(str(i) for i in v)

            params[k] = v

        response = self.session.get(url, params=params)
        if response.ok:
            data = response.json()
            assets = [json_to_asset(json_asset) for json_asset in data.get('hits', [])]
            self.logger.info('Returned %s Assets.', len(assets))
            return assets
        else:
            self.logger.error(response.text)
            response.raise_for_status()