Инструменты для таких целей, насколько мне известно, выглядят примерно так:
- все фразы разбиваются на слова, у них ищется морфологическая основа
- в базе хранятся все слова и фразы, в которых они встречаются (точнее, уже id слова в таблице слов и id фразы в хранилище фраз - там необязательно хранится именно фраза, но она может быть оттуда восстановлена)
- по входящей фразе вы делаете то же самое - разбираете на слова и по базе находите фразы, в которых эти слова встречаются
Вот потом уже на этой, довольно ограниченной, выборке вы можете применять сколь угодно изощренный поиск.