SOLR certainly can do this, however, if you don’t have a ton of experience with Lucene, SOLR, or it’s derivatives, I’d suggest trying out ElasticSearch (https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-14-04).
It has a simple REST interface, and scales wonderfully (and in my opinion, is a little easier to get going than SOLR).
For the searches you’re talking about, there’re a few options to get the behavior you’re talking about, but it’d be down to how you want the search to behave, more than anything else.
For matching like you describe in the first part of your question, you’d use something like a fuzzy match, or allow the user to input a wildcard, and simply pass that to the search. The fuzzy match is probably a little easier to weight towards ‘perfect’ results (you could use boosting within the search service).
For the 'did you mean’ functionality, you could probably just rely on the suggestion packages/services that exist within the SOLR/ES/Lucene services.
Let us know if you have any further questions!