neo4j apoc.path.expandConfig - 如何对关系列表使用 relationshipFilter
neo4j apoc.path.expandConfig - How to use relationshipFilter with a list of relationships
根据文档,竖线字符 (|) 在 relationshipFilter 中充当 or
,而逗号字符 (,) 充当关系的连接,创建它们的列表。
参见 example(与查询本身相比,请查看黑色背景的解释):
和:
问题是,逗号比竖线强吗?
即,如果我想要多个步骤序列选项,我可以指定多个严格列表,还是必须指定一个列表,每个步骤都有多个选项?
我想实现4个关系序列选项:
1.CREATE> 或
2.REACT,回复或
3.CREATE>,相关或
4.REPLY>,创建
所以我写了一个简单的查询:
MATCH(u:User{key:1})
CALL apoc.path.expandConfig(u, {maxLevel: 3,
relationshipFilter: 'CREATE>|REACT,REPLY|CREATE>,RELATED|REPLY>,CREATE',
uniqueness:"RELATIONSHIP_GLOBAL"})
YIELD path
RETURN path
给定样本数据:
MERGE (a:User{key: 1})
MERGE (b:Tags{key: 2})
MERGE (c:Post{key: 3})
MERGE (d:Comment{key: 4})
MERGE (e:Comment{key: 5})
MERGE (f:Comment{key: 6})
MERGE (g:User{key: 7})
MERGE (h:User{key: 8})
MERGE (i:Post{key: 9})
MERGE (j:Tags{key: 10})
MERGE (k:Post{key: 11})
MERGE (l:Comment{key: 12})
MERGE (a)-[:CREATE]-(b)
MERGE (a)-[:CREATE]-(c)
MERGE (a)-[:REACT]-(c)
MERGE (a)-[:CREATE]-(d)
MERGE (a)-[:REACT]-(d)
MERGE (b)-[:RELATED]-(c)
MERGE (d)-[:REPLY]-(c)
MERGE (d)-[:REPLY]-(d)
MERGE (h)-[:REACT]-(c)
MERGE (g)-[:REACT]-(c)
MERGE (h)-[:CREATE]-(j)
MERGE (j)-[:RELATED]-(c)
MERGE (g)-[:CREATE]-(i)
MERGE (e)-[:REPLY]-(i)
MERGE (f)-[:REPLY]-(i)
MERGE (a)-[:REPLY]-(i)
MERGE (h)-[:CREATE]-(k)
MERGE (l)-[:REPLY]-(k)
MERGE (a)-[:REACT]-(l)
我期待得到包含 (a:User{key: 1})-[:REPLY]->(i:Post{key: 9})<-[:CREATE]-(g:User{key: 7})
的答案,这与我 relationshipFilter
的最后一部分相对应,但没有得到。
感谢您的宝贵时间
我认为您的关系过滤器需要更改。
您写了:'CREATE>|REACT,REPLY|CREATE>,RELATED|REPLY>,CREATE'
哪个匹配:
- 创造> 或做出反应
- 回复或创建
- 相关或回复
- CREATE(由于 maxLevel:3,此子句从未被检查过。)
您似乎打算使用 relationshipFilter:"CREATE>,REACT|REPLY,CREATE>|RELATED,REPLY>|CREATE"
哪个匹配
- 创建>
- 反应或回复
- 创建> 或相关
- 回复> 或创建
根据文档,竖线字符 (|) 在 relationshipFilter 中充当 or
,而逗号字符 (,) 充当关系的连接,创建它们的列表。
参见 example(与查询本身相比,请查看黑色背景的解释):
和:
问题是,逗号比竖线强吗? 即,如果我想要多个步骤序列选项,我可以指定多个严格列表,还是必须指定一个列表,每个步骤都有多个选项?
我想实现4个关系序列选项:
1.CREATE> 或
2.REACT,回复或
3.CREATE>,相关或
4.REPLY>,创建
所以我写了一个简单的查询:
MATCH(u:User{key:1})
CALL apoc.path.expandConfig(u, {maxLevel: 3,
relationshipFilter: 'CREATE>|REACT,REPLY|CREATE>,RELATED|REPLY>,CREATE',
uniqueness:"RELATIONSHIP_GLOBAL"})
YIELD path
RETURN path
给定样本数据:
MERGE (a:User{key: 1})
MERGE (b:Tags{key: 2})
MERGE (c:Post{key: 3})
MERGE (d:Comment{key: 4})
MERGE (e:Comment{key: 5})
MERGE (f:Comment{key: 6})
MERGE (g:User{key: 7})
MERGE (h:User{key: 8})
MERGE (i:Post{key: 9})
MERGE (j:Tags{key: 10})
MERGE (k:Post{key: 11})
MERGE (l:Comment{key: 12})
MERGE (a)-[:CREATE]-(b)
MERGE (a)-[:CREATE]-(c)
MERGE (a)-[:REACT]-(c)
MERGE (a)-[:CREATE]-(d)
MERGE (a)-[:REACT]-(d)
MERGE (b)-[:RELATED]-(c)
MERGE (d)-[:REPLY]-(c)
MERGE (d)-[:REPLY]-(d)
MERGE (h)-[:REACT]-(c)
MERGE (g)-[:REACT]-(c)
MERGE (h)-[:CREATE]-(j)
MERGE (j)-[:RELATED]-(c)
MERGE (g)-[:CREATE]-(i)
MERGE (e)-[:REPLY]-(i)
MERGE (f)-[:REPLY]-(i)
MERGE (a)-[:REPLY]-(i)
MERGE (h)-[:CREATE]-(k)
MERGE (l)-[:REPLY]-(k)
MERGE (a)-[:REACT]-(l)
我期待得到包含 (a:User{key: 1})-[:REPLY]->(i:Post{key: 9})<-[:CREATE]-(g:User{key: 7})
的答案,这与我 relationshipFilter
的最后一部分相对应,但没有得到。
感谢您的宝贵时间
我认为您的关系过滤器需要更改。
您写了:'CREATE>|REACT,REPLY|CREATE>,RELATED|REPLY>,CREATE'
哪个匹配:
- 创造> 或做出反应
- 回复或创建
- 相关或回复
- CREATE(由于 maxLevel:3,此子句从未被检查过。)
您似乎打算使用 relationshipFilter:"CREATE>,REACT|REPLY,CREATE>|RELATED,REPLY>|CREATE"
哪个匹配
- 创建>
- 反应或回复
- 创建> 或相关
- 回复> 或创建