Возможные варианты решения
1. Наделить материалы тегами, тогда похожими материалами будут материалы с наибольшим пересечением по тегам.
2. Реализовать свой велосипед с Keywords, парсер и тд.
3. Использовать полнотекстовый поиск. Хабр использует Sphinx. Можно также присмотреться к elasticsearch. В нем например из коробки есть
more like this (mlt) APIThe more like this (mlt) API allows to get documents that are "like" a specified document.
Так же рекомендую кешировать список похожих материалов (и обновлять например по крону или при публикации нового материала), а не расчитывать их каждый раз при выводе материала.