【问题标题】:Node ranking in Neo4J CypherNeo4J Cypher 中的节点排名
【发布时间】:2018-02-11 17:08:45
【问题描述】:

这是我的问题How to do relative node ordering using Neo4J Cypher 的跟进。我在那里接受了答案,但后来意识到我的用例涉及更多。以下是我正在使用的图表的一部分,表中显示了所需的节点顺序。显然,我应该按入度排序,但是对于 具有相同入度的节点,需要考虑它们之间的关系(图中的节点 SA)。不允许循环。

我怎样才能做到这一点?

【问题讨论】:

  • 根据您的可视化,S 的入度是 2,而不是 1。
  • 另外,“需要考虑它们之间的关系”是什么意思?以什么方式考虑?
  • @cybersam 你说得对,S indegree 是 2。我所说的关系需要考虑的是,如果它们具有相同的 indegree,但一个依赖于另一个,依赖的那个应该排名较低。

标签: neo4j cypher spring-data-neo4j


【解决方案1】:

以下似乎可以完成这项工作(感谢this)。我是 Cypher 和 Neo4J 的新手,因此,如果在某些情况下可能不起作用,欢迎其他答案以及关于以下内容的 cmets。

MATCH p = allShortestPaths((a:App)-[:DEPENDS_ON*0..10]->(b:App))
WHERE a <> b
WITH b.name as bn, count(p) AS c
WITH COLLECT({name:bn, count:c}) AS paths
MATCH (a:App) WHERE NOT ()-[:DEPENDS_ON]->(a)
WITH paths + COLLECT({name:a.name, count:0}) AS allPaths
UNWIND allPaths AS path
WITH path.name AS name, path.count AS count
RETURN name, count
ORDER BY count DESC

对于上述图表,上面的查询产生以下结果:

╒═════════╤═══════╕
│"name"   │"count"│
╞═════════╪═══════╡
│"C"      │4      │
├─────────┼───────┤
│"S"      │3      │
├─────────┼───────┤
│"A"      │1      │
├─────────┼───────┤
│"GW"     │0      │
├─────────┼───────┤
│"GC"     │0      │
└─────────┴───────┘

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-04
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多