如何在neo4j中获取子图,使关系的权重满足比较条件?

r6vfmomb  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(227)

假设我有一个很大的图,所有的关系都有一个叫做“权重”的数值属性,我想取一个子图,这个子图由一个指定的中心节点(通过id)和它的邻居组成,这些邻居通过权重大于0.9的关系连接到这个中心节点。
我试图使用APOC,但显然,没有一个开箱即用的选项来建立一个条件的关系。

MATCH (n:Assay {assay_id: "9995-6"})
CALL apoc.path.subgraphAll(n, {
    relationshipFilter: "LINK",
    minLevel: 1,
    maxLevel: 1
})
YIELD nodes
RETURN node,n, LIMIT 25

例如,我想添加这样一行:

MATCH (n:Assay {assay_id: "9995-6"})
CALL apoc.path.subgraphAll(n, {
    relationshipFilter: "LINK",
    minLevel: 1,
    maxLevel: 1,
    r.weight > 0.9    #this line

})
YIELD nodes
RETURN node,n, LIMIT 25

当然,这是行不通的。我希望有一个简单的解决办法。谢谢。

pjngdqdw

pjngdqdw1#

你可以在得到子图之后过滤关系。下面的第8行使用filter those relationships with wt〉.9。只要忽略浏览器中子图的可视化,因为这个查询是一种黑客攻击。

MATCH (n:Assay {assay_id: "9995-6"})
CALL apoc.path.subgraphAll(n, {
    relationshipFilter: "LINK",
    minLevel: 1,
    maxLevel: 1
})
YIELD nodes, relationships  
WITH nodes, [r in relationships where r.wt > .9|r] as relationships
RETURN nodes, relationships LIMIT 25

相关问题