php - 使用 Neo4j 的新闻源中帖子/更新的时间衰减因子

标签 php sql 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)) 作为分数这里我添加了0.1以防止无穷大错误,因为current_time可能几乎等于postcreated_time(as prefer post class) 这里对于单日来说很好,但是一天之后,时间部分并不能很好地贡献总分,因为我计算时间衰减因子的方式不一致,我需要一个能够始终发挥其作用的方程(我意味着在前 7 天以较低的速率降低分数,然后开始以较高的速率降低其对分数的贡献。一种方法是使用三角函数的 tan 或 cot 函数,但问题是,经过一段时间后,它们会改变符号。我将感谢每个人给我进一步的建议。

最佳答案

在基本层面上,这里通常使用指数时间衰减函数。像这样的东西:

score = score / elapsedTime^2

随着帖子发布后耗时增加,分数的值呈指数下降。 Reddit 和 Hacker News 等网站使用了很多 more complicated algorithms ,但这就是基本思想。

关于php - 使用 Neo4j 的新闻源中帖子/更新的时间衰减因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33176450/

相关文章:

sql - 每当将项目添加到 Service Broker 队列时,如何执行存储过程?

Neo4j 数字属性的正则表达式匹配

从没有 'while' 的数据库中打印 PHP

php - Ajax 重置 PHP session

php - 最佳搜索匹配

php - 使用 php 用图片更新现有表单

sql - 选择各自父记录中的子记录总数

sql - 仅在更新的行上更新后的 PostgreSQL 触发器

neo4j - 如何将 map 或json对象存储为neo4j中的属性?

elasticsearch - 使用 GraphAware neo4j-to-elasticsearch 集成时如何从 Elasticsearch 索引中排除多个属性键