Search for music service information items.

        :param search_type: The type of search to perform, possible values are:
            'artists', 'albums', 'tracks' and 'playlists'
        :type search_type: str
        :param search: The search string to use
        :type search: str
        :param start: The starting index of the returned items
        :type start: int
        :param max_items: The maximum number of returned items
        :type max_items: int

        Note:
            Un-intuitively the playlist search returns MSAlbumList
            items. See note in class doc string for details.

def get_music_service_information(self, search_type, search, start=0,
                                      max_items=100):
        """Search for music service information items.

        :param search_type: The type of search to perform, possible values are:
            'artists', 'albums', 'tracks' and 'playlists'
        :type search_type: str
        :param search: The search string to use
        :type search: str
        :param start: The starting index of the returned items
        :type start: int
        :param max_items: The maximum number of returned items
        :type max_items: int

        Note:
            Un-intuitively the playlist search returns MSAlbumList
            items. See note in class doc string for details.
        """
        # Check input
        if search_type not in ['artists', 'albums', 'tracks', 'playlists']:
            message = 'The requested search {} is not valid'\
                .format(search_type)
            raise ValueError(message)
        # Transform search: tracks -> tracksearch
        search_type = '{}earch'.format(search_type)
        parent_id = SEARCH_PREFIX.format(search_type=search_type,
                                         search=search)

        # Perform search
        body = self._search_body(search_type, search, start, max_items)
        headers = _get_header('search')
        response = _post(self._url, headers, body, **self._http_vars)
        self._check_for_errors(response)
        result_dom = XML.fromstring(response.text.encode('utf-8'))

        # Parse results
        search_result = result_dom.find('.//' + _ns_tag('', 'searchResult'))
        out = {'item_list': []}
        for element in ['index', 'count', 'total']:
            out[element] = search_result.findtext(_ns_tag('', element))

        if search_type == 'tracksearch':
            item_name = 'mediaMetadata'
        else:
            item_name = 'mediaCollection'
        for element in search_result.findall(_ns_tag('', item_name)):
            out['item_list'].append(get_ms_item(element, self, parent_id))

        return out