neo4j - Neo4j 如何返回每个属性值的顶部节点
问题描述
我在一组类型的节点上运行 PageRank Paper
,其中每个节点都有一个属性year
。我目前正在使用当年所有论文的 PageRank 分数的平均值和标准差对每个 PageRank 分数进行标准化。
我想返回每年的前 100 篇论文(基于缩放的 PageRank 值)。我可以在单个查询中执行此操作吗?
下面的查询计算比例分数并返回总体排名前 100 的结果,而不是每年的前 100 名:
CALL algo.pageRank.stream(
'MATCH (p:Paper) WHERE p.year < 2015 RETURN id(p) as id',
'MATCH (p1:Paper)-[:CITES]->(p2:Paper) RETURN id(p1) as source, id(p2) as target',
{graph:'cypher', iterations:20, write:false, concurrency:20})
YIELD node, score
WITH
node.title AS title,
node.year AS year,
score AS page_rank
ORDER BY page_rank DESC
LIMIT 100
WITH year, COLLECT({title: title, page_rank: page_rank}) AS data, AVG(page_rank) AS avg_page_rank, stDev(page_rank) as stdDev
UNWIND data AS d
RETURN year, d.title AS title, ABS(d.page_rank-avg_page_rank)/stdDev AS scaled_score;
任何建议将不胜感激!
解决方案
试试这个:
CALL algo.pageRank.stream(
'MATCH (p:Paper) WHERE p.year < 2015 RETURN id(p) as id',
'MATCH (p1:Paper)-[:CITES]->(p2:Paper) RETURN id(p1) as source, id(p2) as target',
{graph:'cypher', iterations:20, write:false, concurrency:20})
YIELD node, score
WITH
node.title AS title,
node.year AS year,
score AS page_rank
ORDER BY page_rank DESC
WITH year, COLLECT({title: title, page_rank: page_rank})[..100] AS data, AVG(page_rank) AS avg_page_rank, stDev(page_rank) as stdDev
UNWIND data AS d
RETURN year, d.title AS title, ABS(d.page_rank-avg_page_rank)/stdDev AS scaled_score;
此查询删除了该LIMIT
子句,而是保留了data
每年前 100 个(排序的)项目。
推荐阅读
- android - 相对布局android无法正常工作
- excel - 跳过了行,但当我通过时有效
- elasticsearch - 如何保护 ElasticSearch 中的数据
- regex - 正则表达式匹配第一个字符和文件扩展名
- ios - 如何解决 PhotoKit 错误“原始资源选择仅对未调整的基础版本有效”?
- python-3.x - ModuleNotFoundError:python 中没有名为“flask_wtf”的模块
- c# - 需要从 Gridview 中选择一行并运行显示结果的选择查询
- python-3.x - 查找列表元素和数据框列之间的最长匹配
- hibernate - 参数未在 Spring Boot 中的 JPA @query 中传递
- typescript - 通用对象返回类型是方法链接的结果