如何获取关系属性> =某个值的可变长度模式路径的一部分?

How to get portion of variable-length pattern path where relationship attribute >= some value?

如何 return 仅满足某些条件的可变长度模式路径部分?

在下面的示例中,以下密码查询将 return 蓝色和红色节点。

MATCH p=(a:Person)-[:KNOWS*1..10]->(b:Person)-[:KNOWS]->(j:Person { name: 'Jane'})
RETURN p

但是,我想return蓝色节点有传入关系confidence_factor >= 0.75。问题是我尝试过的一切

  1. 消除整个上层混合blue/red路径b/c它有一个未通过测试的rel
  2. 仅消除 Jim->Erin rel b/c 它未通过测试。

实际上,我希望所有顺序节点从 Jane 向后移动,其中关系 confidence_factor >= 0.75 但是给定的路径应该在遇到未通过该测试的 rel 时立即停止,并且 NOT CONTINUE,即使该路径中节点之间的其他关系可能会通过(例如 Tom-[:KNOWS]->Jim)

CREATE (one:Person { name: 'Tom'})
,(two:Person { name: 'Jim'})
,(three:Person { name: 'Erin'})
,(four:Person { name: 'Kevin'})
,(five:Person { name: 'Skylar'})
,(six:Person { name: 'Jane'})

,(one)-[:KNOWS {confidence_factor:0.80}]->(two)
,(two)-[:KNOWS {confidence_factor:0.05}]->(three)
,(three)-[:KNOWS {confidence_factor:0.85}]->(six)
,(four)-[:KNOWS {confidence_factor:0.90}]->(five)
,(five)-[:KNOWS {confidence_factor:0.95}]->(six)
;

您应该已经获得了具有不同路径长度的多行。只需寻找所有关系都符合您的条件的那些路径。

MATCH p = (:Person {name: 'Jane'})<-[:KNOWS*1..10]-(:Person)
WHERE all(r IN relationships(p) WHERE r.confidence_factor >= 0.75)
RETURN p

如果要从没有 Jane 的路径中提取节点(如果要包含 Jane,请删除 tail()):

MATCH p = (:Person { name: 'Jane'})<-[:KNOWS*1..10]-(:Person)
WHERE all(r IN relationships(p) WHERE r.confidence_factor >= 0.75)
UNWIND tail(nodes(p)) as person
RETURN DISTINCT person