【发布时间】:2016-04-07 12:09:47
【问题描述】:
假设我在 neo4j 中存储了以下关系。
A->B,A->D,C->B,C->E
这里A、C是同一个标签节点,B、E也是同一个标签节点。 计算 A 和 C 共有多少个节点的密码查询是什么? 基于此,我想建立 A 和 C 之间的关系。我想在它们之间添加一个关系等级并给它一些值,比如 0.5,因为 1 个节点是常见的。该查询会是什么样子?
【问题讨论】:
假设我在 neo4j 中存储了以下关系。
A->B,A->D,C->B,C->E
这里A、C是同一个标签节点,B、E也是同一个标签节点。 计算 A 和 C 共有多少个节点的密码查询是什么? 基于此,我想建立 A 和 C 之间的关系。我想在它们之间添加一个关系等级并给它一些值,比如 0.5,因为 1 个节点是常见的。该查询会是什么样子?
【问题讨论】:
要返回 A 和 C 之间的公共节点数,匹配具有 的模式A 在一个,C 在另一个带有中间节点。然后统计中间节点的出现次数。
match (:TypeOne {name: 'A'})--(common)--(:TypeOne {name: 'C'})
return count(common)
如果您想作为匹配结果直接在 A 和 C 之间创建关系,那么将 merge 或 create 与 A 和 C 节点一起使用。并使用set 为新创建的关系添加一个值。
这样的东西应该可以满足你的要求。
match (a:TypeOne {name: 'A'})--(common)--(c:TypeOne {name: 'C'})
with a, c, count(common) as in_common
merge (a)-[rel:COMMON_WITH]->(c)
set rel.value = in_common * 0.5
return *
【讨论】: