<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def open(self) -> None: """ Begin the search operation. """


        LOGGER.debug('StorageRecordSearch.open >>>')

        if self.opened:
            LOGGER.debug('StorageRecordSearch.open <!< Search is already opened')
            raise BadSearch('Search is already opened')

        if not self._wallet.opened:
            LOGGER.debug('StorageRecordSearch.open <!< Wallet %s is closed', self._wallet.name)
            raise WalletState('Wallet {} is closed'.format(self._wallet.name))

        self._handle = await non_secrets.open_wallet_search(
            self._wallet.handle,
            self._type,
            self._query_json,
            StorageRecordSearch.OPTIONS_JSON)

        LOGGER.debug('StorageRecordSearch.open <<<')