There are four parameters for fuzzy. The first is the term to search for. The second is the minimum score. If you do not specify a minimum score, then the default is 60. So, when you use "someword, , , weight" it only returns rows that score 60 or above. If you use "someword, 1, 5000, weight" then it returns rows that score 1 or above, which will return more results, that don't match as closely. This might solve your problem when adding a search for nick or sara or whatever.
Even with the lower score, some things may still not be found, like Tommy and Thomas. Fuzzy searches for similar spellings. You can create a custom thesaurus and enter synonyms for such nicknames, then use SYN within your CONTAINS to search for them and find them.
If pref_mail_name is a list of people's names, you should at least experiment with defining the column as an NDATA section, then using the NDATA operator [http://docs.oracle.com/cd/E11882_01/text.112/e24436/cqoper.htm#CCHDHHBE].