在Neo4j中设置与边的关系的好方法

在Neo4j中设置与边的关系的好方法,neo4j,cypher,Neo4j,Cypher,对于我的项目,我需要在Neo4j图形数据库中创建与边的关系 让我们举一个航班供应商的例子,该供应商经营从罗马到伦敦和从奥斯陆到里斯本的航班 CREATE (l:City{name:"London"}) (r:City{name:"Rome"}), (li:City{name:"Lisbon"}) (o:City{name:"Oslo"}), (op:Operator{name:"One"}), (l)<-[f:Fligh

对于我的项目,我需要在Neo4j图形数据库中创建与边的关系

让我们举一个航班供应商的例子,该供应商经营从罗马到伦敦和从奥斯陆到里斯本的航班

CREATE (l:City{name:"London"})
       (r:City{name:"Rome"}),
       (li:City{name:"Lisbon"})
       (o:City{name:"Oslo"}),
       (op:Operator{name:"One"}),
       (l)<-[f:FlightRoute{distance:900}]->(r)
您如何将运营商一号连接到伦敦、罗马、里斯本和奥斯陆,以建议该运营商连接这些城市lr和lio,但不连接例如ro。其他运营商将在其他城市开展业务。基本上我想把op链接到2条边上

要执行的查询将是查找执行不同行的所有运算符。假设具有距离参数等,计算操作的总距离


我只能想象在l和r之间创建一个节点。还有其他方法吗?

正如您所怀疑的,具体化,即将关系转化为节点,可能是处理您的情况的最佳方法

下面是一个查询示例,该查询添加了一个事实,即运营商运营从伦敦到罗马的航班:

MATCH  (l:City {name:"London"}),
       (r:City {name:"Rome"}),
       (op:Operator {name:"One"})
CREATE (l)<-[:FROM]-(f:FlightRoute{distance:900})-[:TO]->(r),
       (op)-[:OPERATES]->(f);
Cityname和Operatorname的索引或唯一性约束将有助于加速上述查询

MATCH  (li:City {name:"Lisbon"}),
       (o:City {name:"Oslo"}),
       (op:Operator {name:"One"})
CREATE (li)<-[:FROM]-(f:FlightRoute{distance:21})-[:TO]->(o),
       (op)-[:OPERATES]->(f);
MATCH (l:City {name:"London"})<-[:FROM|TO]-(f)-[:FROM|TO]->(r:City {name:"Rome"}),
      (op:Operator)-[:OPERATES]->(f)
RETURN DISTINCT op;
MATCH (op:Operator {name:"One"})-[:OPERATES]->(f)
RETURN SUM(f.distance);