neo4j - 如何从 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
解决方案
我遇到过这个问题,但直到今天我看到你的问题时才坐下来解决它。如果你像我一样有很多关系,我会感觉到你的痛苦。理想情况下,他们最终会为 rels 添加一个减法,但现在 DIY 并不难。
脚步
- 获取所有关系的列表
- 减去你不想要的
- 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)
用于将其拼凑在一起的参考资料
- 减少: neo4j 密码将数组/列表转换为字符串
- 列表理解过滤: 不再支持 Neo4j 过滤功能
推荐阅读
- javascript - 如何使用 javascript/css 将网站页面缩放级别强制为固定值?
- javascript - Nodejs Mocha:无法通过 ID 测试 POST 和 GET
- django - 如何在模板'for post in user.post_set.all'中设置查询限制?(不使用视图)
- haskell - 如何使用 zipWith(+) 添加两个数据类型 [[double]] 列表?
- java - 获取应用程序名称 Springboot application.yml 时出现 NullPointerException
- c# - C# - UWP:如何获取 TextRange 对象?
- javascript - 滚动后在对象的旧位置触发 mojs 动画
- git - 有没有办法配置一个 repo 在克隆时递归下载它的一些子模块?
- fix-protocol - OUCH 协议和 FIX 协议有什么区别。两种协议的消息看起来非常相似
- amazon-web-services - Amazon Pinpoint API 与 AWS 简单通知服务