Как составить запрос, чтобы выводить похожие материалы?

У меня БД, которая содержит названия материалов из нескольких слов, например: "Google и Audi собираются объединится", "Nokia Lumia 520 занимает 30% рынка Windows Phone 8" и "Смартфон LG G2 получит Android 4.4". Мне нужно найти материал, которые встречаются одинаковые слова, и вывести как "похожие материалы", чем больше одинаковых слов, тем более вероятности вывода.
  • Вопрос задан
  • 3092 просмотра
Пригласить эксперта
Ответы на вопрос 4
Kerman
@Kerman
Нужна табличка Keywords. В ней должны быть id и ключевое слово.
И ещё нужна таблица связи Keywords и таблицы материалов.
И ещё нужен парсер, который создаст таблицу ключевых слов.

При выполнении этих правил задача становится выполнимой. Но это уже шаманство с IN(), GROUP BY, HAVING и ORDER BY.
Ответ написан
Комментировать
street
@street
Backend developer
Можно воспользоваться полнотекстовым поиском, если у Вас таблицы MySQL в MyISAM.
Ответ написан
Комментировать
affka
@affka
http://affka.ru
@Kerman по сути предложил изобрести поисковый движок.
Рекомендую взять готовые решения, например sphinx или подобные. Они целиком решат твою задачу.
Ответ написан
Комментировать
@AlexGx
Yii2 developer, business analytics
Возможные варианты решения

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


Так же рекомендую кешировать список похожих материалов (и обновлять например по крону или при публикации нового материала), а не расчитывать их каждый раз при выводе материала.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы