You can use wildcards in your search term on a string type field. For example:
name:*black* OR description:*black*
With this search you get any results that have "black" in "name" or "description" and it doesn't have to be an exact match. In order to sort according to the quality of the match i think you would have to define a boost for the exact match and sort by the score. But this i have not done yet.
Just in case you didn't know yet. Searches on the type string are case sensitive by default. So you would not find matches for "Black" (except you really have a document where it is written in capital case). To change this behaviour you must define your own case insensitive string type:
<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
But this doesn't work for wild card search (as for "black"). In that case you would have to transform every search term that should include wildcards to lower case before sending to solr.
A different solution would be to use a different type (for example "text") instead of "string".