Une approche consiste à examiner la distance de Levenshtein entre le terme de recherche et la liste de mots clés. Il existe quelques exemples de la façon d'implémenter cela dans MySQL, par exemple. ICI
Étant donné que votre catalogue est si volumineux, vous devrez d'abord envisager d'implémenter un filtre (peut-être basé sur une recherche "LIKE") afin de ne pas mesurer la distance pour toutes les lignes de 1 million.
Si vous classez les résultats par distance, vous devriez pouvoir trier les résultats par pertinence pour la recherche.