Задать вопрос

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

У меня БД, которая содержит названия материалов из нескольких слов, например: "Google и Audi собираются объединится", "Nokia Lumia 520 занимает 30% рынка Windows Phone 8" и "Смартфон LG G2 получит Android 4.4". Мне нужно найти материал, которые встречаются одинаковые слова, и вывести как "похожие материалы", чем больше одинаковых слов, тем более вероятности вывода.
  • Вопрос задан
  • 3093 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Skillbox
    PHP-разработчик. Базовый уровень
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 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.


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

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

Похожие вопросы