2010-10-07 15 views
0

J'utilise une version personnalisée de l'algorithme de popularité de Hacker News pour mon site social (articles avec un certain nombre de j'aime et de commentaires). L'algorithme fonctionne parfaitement, mais je ne sais pas comment mettre à jour correctement les scores d'items (je stocke la partition dans le modèle d'item sous forme de méta-données).Comment mettre à jour le score de popularité du contenu tel que l'algorithme Hacker News?

Maintenant, je ne fais que mettre à jour les scores sur chaque nouvelle chose et commenter pour les éléments énumérés au cours des 9 derniers jours. C'est vraiment lent et les ressources sont lourdes, donc je suis à la recherche d'un meilleur moyen de garder les scores à jour. Le problème est que chaque article a besoin d'un nouveau score quand on change pour garder le temps de décroissance. Quelle serait la meilleure façon de faire cela? J'utilise Django pour le projet.

Répondre

0

Il y a un certain nombre de façons de le faire. Un moyen simple est de numéroter les éléments de manière séquentielle et de commencer chaque élément avec un 'identifiant de rang' de son numéro d'identification. Chaque fois qu'un poste est classé, incrémenter son numéro de classement (et vice-versa pour les votes vers le bas). Ensuite, trier par numéro de rang pour commander les articles correctement.

Une autre option est un modèle de décroissance exponentielle, ce qui nécessite des mises à jour périodiques, mais ceux-ci peuvent être piggy soutenu sur les votes, ce qui réduit la quantité de travail mise à jour batch que vous devez faire. J'ai écrit un article sur la mise en œuvre de ce here. Il est destiné à App Engine, mais généralement utile.

3

OK. Je l'ai fait en utilisant différentes applications: D'abord, vous devez installer soit "dokterbob/django-popularité" sur github ou "thornomad/django-hitcount" pour suivre la fréquence à laquelle un lien est visité. Deuxièmement, vous devez compter le nombre de votes (favoris ou favoris) reçus par un objet. Pour cela, vous pouvez essayer "brosner/django-voting", "apgwoz/django-favorites".

Maintenant, vous devez utiliser ce morceau de code - django-populars pour les mettre tous ensemble. Je recommanderais de regarder dans this code tout d'abord pour voir comment cela fonctionne pour comprendre comment assembler les composants nécessaires.