Как обновить подсчет популярности контента, такой как алгоритм Hacker News?

Я использую настроенную версию алгоритма популярности Hacker News для своего сайта в социальной сети (элементы с количеством лайков и комментариев). Алгоритм работает отлично, но я не знаю, как правильно обновить оценку элемента (я сохраняю оценку в модели элемента в виде метаданных).

Теперь я просто обновляю баллы за каждый новый лайк и комментарий к элементам, перечисленным за последние 9 дней. Это очень медленно и ресурсоемко, поэтому я ищу лучший способ поддерживать актуальность результатов. Проблема в том, что каждый элемент нуждается в новом счете, когда он изменяется, чтобы сохранить время. Что было бы лучшим способом сделать это? Я использую Django для проекта.


person jorilallo    schedule 07.10.2010    source источник


Ответы (2)


OK. Я сделал это с помощью разных приложений: во-первых, вам нужно установить либо «dokterbob/django-popularity» на github, либо «thornomad/django-hitcount», чтобы отслеживать, как часто посещается ссылка.

Во-вторых, вам нужно подсчитать, сколько голосов (лайков или избранных) получает объект. Для этого вы можете попробовать «brosner/django-voting», «apgwoz/django-favorites».

Теперь вам нужно использовать этот фрагмент кода --django-populars, чтобы собрать их все вместе. Я бы рекомендовал изучить этот код прежде всего, чтобы увидеть, как это работает, чтобы понять, как собрать необходимые компоненты.

person KalamHavij    schedule 25.06.2012

Есть несколько способов сделать это. Одним из простых способов является последовательная нумерация элементов и начало каждого элемента с «идентификатора ранга» его идентификационного номера. Всякий раз, когда пост получает повышенный рейтинг, увеличивайте его номер ранга (и наоборот для отрицательных голосов). Затем отсортируйте по номеру ранга, чтобы правильно упорядочить элементы.

Другим вариантом является модель экспоненциального распада, которая требует периодических обновлений, но они могут быть связаны с голосами, уменьшая объем работы по пакетному обновлению, которую вам нужно выполнять. Я написал статью о реализации этого здесь. Он ориентирован на App Engine, но в целом полезен.

person Nick Johnson    schedule 08.10.2010