основа для возрата ответов - Сфинкс, ну или Эластик
а вот с запросом к нему - нужно заморочиться с СИСТЕМОЙ
система должна , помимо основного вопроса, возвращать его синонимы ( чтобы по ним параллельно запрашивать Сфинкс, основная проблема поиска - не вернуть релевантный ответ, а понять что хочет спросить пользователь)
тут - от Томиты и NLTK до кластеризации и ручных таблиц синонимов