Have you ever considered adding a ‘similar word’ or ‘search term’ look up table that would allow users to marry up search terms with common aliases?
Lending from Will’s example above, the table would allow the creation of aliases for the search term ocean, which when searched would then also display matches for any of the other search terms. Conversely, a search for shell would also show the other results as the rule certainly doesn’t need to only flow one way, although that could be selectable option if required.
ocean > shell > shells > shelling
An example from our site might be linking chicken coops with common searches:
chicken coop > chicken coup > chicken pen > chicken house > hen house
Grouping in this way would provide the same search results no matter which term was being searched for and aside from the examples I’ve shown here would allow you to add rules to cover common misspellings.
I believe this to be a far more elegant solution than trying to maintain keywords on products which requires constant attention when new products are added. With this method you need only create the rule once as new products will be covered providing they have the search terms contained within the product name or description.
I imagine you could still use the current search technique but simply append the SQL call to include the additional LIKE modifiers if the search term exists within the alias array.