Generally, don't make assumptions on a user's intentions when performing a search (or anything else). If a user is looking for multiple 'cats' don't assume that a single 'cat' is good enough to quench the user's lust for feline shenanigans.
There are also a great deal of plurals that would be very difficult for you to adjust to - 'goose' vs. 'geese', for example. If you match some plurals but not others, you will begin to create confusion.
Define a straight forward search logic and stick to it. One suggestion might be:
- Exact match
- Partial match, from start ('cathedral' matches 'cathedrals'; 'be' matches 'bee', not 'rebels')
- Partial match, internal to string ('be' matches 'rebel')
Rank ordering the results based on the above would allow the user to learn the search pattern. Mixing results would make that more difficult. While the above still suffers from 'cathedrals' not matching 'cathedral', the user may likely adjust their search on their own.
If you are still want to guess on plurals, I'd suggest including a "do you want to try" section -- similar to Google's "did you mean" string when you misspell something in your search. This gives the user the ability to quickly just to plurals (or singulars) without cluttering results that may be exactly what they wanted.
be
matchingrebel
shouldn't be a big problem as long as you rank-order the results to first show exact matches of the full wordbees
then full matches of the full wordbee
followed by matches (if you're doing this without a dictionary) of the full wordbe
, then potentially matches ofbees
andbee
andbe
as part of a word. (Whether you should match partial words at all is a separate question; I don't think it's a good idea. Better to match full words only and suggest alternative searches within a certain Levenshtein distance.)