You can use string comparison among strings of the same length and allow for one (or two) unmatching characters.
By looking at your website, though, I'd suggest to map the words by their phonetic representation and then search into them, treating the strings like characters arrays and starting the comparison from the back.
To build over your example:
near -> \'nir\
pear -> \'per\
dear -> \'dir\
rear -> \'rir\ or \'rer\
here -> \'hir\
(I'm ripping off the Merriam-Webster online for the phonetic notation, here)
The mapping, I'm afraid, should be done as a look-up table and can't be compiled, because English doesn't have very strong pronunciation rules...
Anyway, once you mapped your words, you can compare their last phoneme: in this case, you may want to look for words that end in "ir\" (which would exclude "pear", in this case).
This method doesn't look terribly efficient: if I could use some disk space, I'd save the searches for future reference: so when a second use looks for all the words which rhyme to "near", the application just loads the saved search -since dictionaries usually don't evolve too fast.
http://en.wikipedia.org/wiki/Levenshtein_distance , http://en.wikipedia.org/wiki/String_distance_metric , http://en.wikipedia.org/wiki/Phonetic_algorithm – gronostaj – 2014-08-16T07:48:04.697