2015-10-16 5 views
1

Я использую neo4j для получения новостей с помощью этого запроса.фактор распада времени для сообщений/обновлений в ленте новостей с использованием neo4j

MATCH (u:Users {user_id:140}),(p:Posts)-[:CREATED_BY]->(pu:Users) 
WHERE (p)-[:CREATED_BY]->(u) OR (p:PUBLIC AND (u)-[:FOLLOW]->(pu)) OR 
(p:PRIVATE AND (p)-[:SHARED_WITH]->(u)) 
OPTIONAL MATCH (p)-[:POST_MEDIA]->(f) 
OPTIONAL MATCH (p)-[:COMMENT]->(c)<-[:COMMENT]-(u3) RETURN 
(p.meta_score+0.2*p.likes+0.1*p.dislikes + 10/(((".time()."- 
p.created_time)/3600)+0.1)) as score, 
{user_id:pu.user_id,firstname:pu.firstname,lastname:pu.lastname, 
profile_photo:pu.profile_photo,username:pu.username} as pu, p, 
    collect({user_id:u3.user_id,profile_photo:u3.profile_photo,text:c.text}) as comment, 
collect(f) as file ORDER BY score DESC, 
p.post_id DESC LIMIT 25 

В этом уравнении для получения счет прямо сейчас я использую в основном это уравнение p.meta_score+0.1*p.likes-0.05*p.dislikes + 10/(((current_time- p.created_time)/3600)+0.1)) as score здесь я HACE добавляемые 0.1, чтобы предотвратить ошибку бесконечности, как current_time может быть почти равным размещать created_time (as p refer post class) Здесь его хорошо для одного дня но через день часть time не вносит вклад в общий балл, так как способ вычисления коэффициента времени не согласуется. Мне нужно уравнение, которое играет свою роль последовательно (я имею в виду уменьшение балла по меньшей мере) за первые семь дней и начинают уменьшать свой вклад в счет по более высокой ставке. один способ использовал функции trigonometry's tan or cot, но проблема в том, что через несколько интервалов они меняются там. Я должен быть благодарен всем, что дает мне дополнительные предложения.

ответ

2

На базовом уровне здесь обычно используется экспоненциальная функция распада времени. Нечто подобное:

score = score/elapsedTime^2 

В прошедшее с момента почтовых увеличивается, величина балла экспоненциально убывает. Такие сайты, как Reddit и Hacker News, используют много more complicated algorithms, но это основная идея.

+0

делает Neo4j высчитывать поддерживает показатель –

+1

да: http://neo4j.com/docs/stable/query-operators.html –

+0

да я тоже получил, что после короткого поиска –