首页 > 解决方案 > 如何从 apoc.path.expandConfig 或类似中排除/黑名单关系类型?

问题描述

所以我试图找到一对不同类型的节点之间的路径。代码如下所示。该图非常大并且具有许多不同类型的关系,其中一些我想从路径中排除/列入黑名单,因为它们非常冗余/无趣。

据我apoc.path.expandConfig 所知,本机不允许这样做。有没有办法我可以做到这一点?

MATCH (sourceNode:SourceLabel {symbol: "<source node>"})
MATCH (targetNode:TargetLabel {name:"<target node>"})
CALL apoc.path.expandConfig(g, {
    labelFilter: "IntermediaryLabel1, IL2a|IL2b|IL2c, >TargetLabel",
    minLevel: 1,
    maxLevel: 3,
    terminatorNodes: [targetNode],
    uniqueness: "NODE_PATH",
    limit: 50
})
YIELD path
RETURN path, length(path) AS hops
ORDER BY hops

标签: neo4jcypherneo4j-apoc

解决方案


我遇到过这个问题,但直到今天我看到你的问题时才坐下来解决它。如果你像我一样有很多关系,我会感觉到你的痛苦。理想情况下,他们最终会为 rels 添加一个减法,但现在 DIY 并不难。

脚步

  1. 获取所有关系的列表
  2. 减去你不想要的
  3. apoc 调用中使用的格式
// get all relationships
CALL db.relationshipTypes() yield relationshipType WITH collect(relationshipType) as rt
// remove unwanted relationships
WITH [n IN rt WHERE NOT n IN ['PERTURBS','CAUSES_SIDE_EFFECT','TREATS','REPURPOSED_INDICATION','SUBSET_OF','GENE_EC','GENE_GENE']] as rt2
// format for use in apoc call
WITH REDUCE(ms = "",word IN rt2 | ms+word+'|') as js
// remove trailing pipe
WITH LEFT(js, SIZE(js)-1) as relationshipWhiteList
// your cypher here (and use the variable relationshipWhiteList)

用于将其拼凑在一起的参考资料


推荐阅读