Learning to Rank Application
Collaborative Filtering would definitely be a good start. This would work as follows. For each user, you can fill in rankings for restaurants they have not yet ranked by averaging the ranks (or some other aggregation) of similar users who have rated that restaurant. 

Alternatively, you could take a content based approach. Here, each restaurant has a collection of keywords, and using or rating a given restaurant updates a user's profile for those keywords. Then, the user's profile can be compared (via cosine similarity or something) to all other restaurants profiles. Then you order accordingly.

It may be more useful to map into a latent space first, but up to you.