neo4j apoc.path.expandConfig - 如何对关系列表使用 relationshipFilter

neo4j apoc.path.expandConfig - How to use relationshipFilter with a list of relationships

根据文档,竖线字符 (|) 在 relationshipFilter 中充当 or,而逗号字符 (,) 充当关系的连接,创建它们的列表。

参见 example(与查询本身相比,请查看黑色背景的解释):

和:

here, page 14: sequences:

问题是,逗号比竖线强吗? 即,如果我想要多个步骤序列选项,我可以指定多个严格列表,还是必须指定一个列表,每个步骤都有多个选项?

我想实现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' 哪个匹配:

  1. 创造> 或做出反应
  2. 回复或创建
  3. 相关或回复
  4. CREATE(由于 maxLevel:3,此子句从未被检查过。)

您似乎打算使用 relationshipFilter:"CREATE>,REACT|REPLY,CREATE>|RELATED,REPLY>|CREATE"

哪个匹配

  1. 创建>
  2. 反应或回复
  3. 创建> 或相关
  4. 回复> 或创建