tokenized and hashed version of the message message.hashed
so the message "hello world" would be encrypted but you would also get hash("hello")+ " "+ hash("world") stored on the server? This would mean an attacker could recognize frequently used English words by calculating hash("hello") and searching? ... I would think the client should tokenize and encrypt the hashes as well: encrypt(hash("hello"), private_key) + " " + encrypt(hash("world"), private_key)
Random thought: What if the user submits a merkle-tree, so searching for a sub-string could mean searching for a path in the tree ...
Maybe hashes in the tree could be encrypted using a key from the client.