Веб-разработка / Делаем рекомендации для своего проекта

в 3:21, , рубрики: игры, рекомендации, метки: ,

Привет! Когда мы работали над finle.ru, встал вопрос о реализации самих рекомендаций, способов придумали несколько, хотелось бы поделиться с сообществом, возможно кто-нибудь предложит идеи по-интереснее.

Интересно мне, интересно и другим

Первый способ, именно он сейчас и используется на сайте, как самый оптимальный. В базе хранятся пары, вида game_id1 | game_id2 | points. Эти пары формируются следующим образом: допустим ранее мы оценили несколько игр, в базе это выглядит так

Id игры Название игры Оценка
1 Team Fortress 2 9
2 Counter-Strike 8
3 Half-Life 6

Теперь мы поставили игре Half-Life 2 с id=4 оценку 9. Сразу после оценки мы выбираем все предыдущие наши отметки с оценкой >= 7 (в нашем случае это id=1,2) и записываем в базу каждую эту игру в пару с последней оценкой. Т.е. пары 4 и 1, 4 и 2, а в поле points указываем оценку этой игры, если же в базе такая запись уже существует, то мы просто прибавляем к полю points величину равную оценке. Получается такая таблица

game_id1 game_id2 points
4 1 9
4 2 8

Выбрать id рекомендованных игр из базы теперь очень просто: получаем id игр, которые мы оценили оценкой >= 7, запрашиваем по этим id пары и сортируем по полю points.

Плюсы

  • Скорость работы

Минусы

  • Необходимо набрать большую базу оценок, чтобы результаты рекомендаций были более-менее адекватными
Не гадай, смотри вкусы

Чем отличается одна игра от другой? Сюжетом, графикой, жестокостью, юмором, запутанностью, список можно продолжать очень долго, именно на этих свойствах и строился наш второй способ. Каждой игре в базе мы выставляли эти свойства, по десяти-бальной шкале. Всего таких свойств было около десяти. У пользователя в базе хранились точно такие же свойства, только в виде промежутка. Так с каждой новой оцененной игрой, эти промежутки изменялись и можно было показывать новые игры, входящие в промежуток. Подробности рассказывать не стану, все просто.

Плюсы

  • Широкий набор данных для фильтрации, можно выбрать все страшилки или наоборот

Минусы

  • Тяжелые запросы
  • Тяжело набивать базу, все приходиться делать ручками

Автор: Troytft

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js