1) Берете либо делаете автокомплит компонент. Делается просто, временами проще сделать, чем настраивать под себя, что то существующее. Делается реально просто.
2) Автокомплит компонент при вводе определенного количества символов отправляет запрос на сервер. Если символы допечатали - предыдущий отправленный запрос прерывается (debounce называется такая фигня).
3) Сервер в ответ на фразу делает запрос в базу и вытаскивает данные. Как вытаскивает - упомянутый вами fuzzy search (чаще всего основан на расстоянии левенштейна), полное / частичное совпадение, другой вариант который будет ставить в соответствие фразу и определенные записи из бд. ElasticSearch - если я не ошибаюсь для тех вариантов, когда нужен поиск по тексту статьи. В ответ шлется наименование статьи и идентификатор статьи либо вся статья. Вся статья либо идентификатор - по желанию, в зависимости от размера статей.
4) После того как пришел ответ с сервера - vuejs при выборе из списка автокомплита отображает статью либо подгружает ее по идентификатору, либо что то еще аналогичное.
Все просто и легко и пишется самостоятельно. Как то был потрачен день на поиск готовых вариантов, в результате чего было найдено что то относительно неплохое, весящее много, "прицепленное к текущему проекту изолентой". Потом - за полдня был написан свой вариант который и работал быстрее и весил меньше и настраивался легко под текущие задачи.