'Search the database for the specified query, returning a set of matched book ids.
:param restriction: A restriction that is ANDed to the specified query. Note that
restrictions are cached, therefore the search for a AND b will be slower than a with restriction b.
:param virtual_fields: Used internally (virtual fields such as on_device to search over).
:param book_ids: If not None, a set of book ids for which books will
be searched instead of searching all books.'

@read_api
def search(self, query, restriction=u'', virtual_fields=None, book_ids=None):

    return self._search_api(self, query, restriction, virtual_fields=virtual_fields, book_ids=book_ids)
