Wat wellicht een optie is voor jou is als je MySQL gebruikt is om met match against te gaan werken en strings in je database opslaan (alhoewel andere databases ongetwijfeld ook een dergelijke zoekmethode hebben).
Ruim een half jaar geleden ben ik me daar eens mee bezig gaan houden, het resultaat staat op
http://fai.fragfrog.nl. In een database sla ik vragen en antwoorden op, aan elkaar gekoppeld met ID's een een score voor relevantie (met MySQL's match against in full_text_mode kun je een score krijgen die aangeeft hoe goed je zoekstring lijkt op een bepaald record). Gestelde vragen worden gekoppeld aan hun best matchende antwoord (waarbij gebruikers ook zelf aan kunnen geven of een match goed of slecht is) en dankzij query expansion worden ook antwoorden die op gelijksoortige vragen gegeven zijn terugkomen. Bij compleet onbekende zinnen wordt in de learning mode gevraagd een antwoord in te vullen, zodat gebruikers zelf meehelpen de database te vergroten (wat helaas gruwelijk misbruikt wordt momenteel gezien een aantal infantiele antwoorden, maar daar verzin ik nog wel een keer wat op

). Daarnaast zijn er een aantal 'fallback' searches en speciale modes (zo zal {time} in een antwoord altijd de huidige tijd weergeven omdat het bij het ophalen vervangen wordt) die bijvoorbeeld een 100% match geven als een zin al letterlijk eens is voorgekomen.
Het voordeel van een dergelijk systeem is dat je in principe heel dynamisch zoeken toe kan staan - een vraag als 'waar bevinden jullie je?' kan zo bijvoorbeeld ook beantwoord worden als je alleen een antwoord voor 'waar zijn jullie te vinden?' hebt opgeslagen. Hierin schuilt natuurlijk ook weer het nadeel: je 'net' wordt zo wel snel groot en mensen kunnen resultaten terugkrijgen waar ze niet naar op zoek waren.
Als je echt zeker wilt dat productsearches altijd relevante informatie teruggeven zou je eigenlijk een tabel moeten maken met alle productnamen en iets van een ID waar hun info-pagina gevonden kan worden en een match against doen versus die tabel - alle woorden in een zin die niet in je tabel staan leveren dan automatisch een score 0 op en de rest zou al op relevantie gesorteerd moeten zijn. Hou er dan alleen wel rekening mee dat woorden van minder dan 4 karakters standaard niet eens gevonden zullen worden.