我可以使用 Cypher 查询中的什么技术来仅获取基于每个节点的多个关系属性的路径

What technique in a Cypher query can I use to get only the paths based on multiple relationship properties per node

我有这个图形数据库,它包含两种类型的节点(neo4j 中的标签),节点是车站和路线节点。还有两种边(neo4j中的关系),connection(CONNECTED_WITH)和routeConnection(USES_STATION)。连接是两个站节点之间的双向关系。 routeConnection 是从路线节点到站点节点的关系。我知道我可以使用两个车站之间的定向关系来解决我的部分问题,但这只会让其他事情变得更加复杂,因为在我的情况下,图表应该代表实际的物理铁路网络(只是要明确这不是什么我可以为我的特定项目做。

站节点: (UUID stationId的原因是其他微服务造成的)

CONNECTED_WITH关系:

路线节点:

USES_STATION关系:

USES_STATION 关系上的 属性 connectionId 是对应该使用到下一个站点的连接的引用。这是因为两个站之间可能存在多个连接。路线上最后一个站的 routeConnection 的 connectionId 值为 null。

这是图形数据库当前包含的内容:

问题如下。我希望能够将 startStationId (UUID) 和 endStationId (UUID) 作为参数,并且查询应该 return 所有可能从起点站到终点站的路线,以考虑方向(由 USES_STATION 上的 connectionId 确定)。

我是 Neo4j 和 Cypher 查询语言的新手。这是我根据两个站筛选出来的。

    MATCH p=(r1:Route)-[rc1:USES_STATION]-(x:Station)-[c:CONNECTED_WITH*]-(y:Station)-[rc2:USES_STATION]-(r2:Route)
WHERE x.stationId = '05cce0f7-1409-4224-926a-db3b4c4a8ce5' AND y.stationId = '11018de0-1943-42b2-929d-a707f751f79c' AND r1=r2
RETURN p

这是对两条可能的路线进行了一些澄清后的结果。蓝色路线是我想 returned 由于方向(从站 x 到站 y)。

由于查询不正确,它仍然给我不感兴趣的节点,但我认为这无关紧要。主要问题是我不知道如何只获取请求方向的路由节点,如前所述(从站 x 到站 y。也有可能请求的站需要多条路由,我想要查询return到目的站的所有可能路径,上面的例子只有1个合适的路线节点。

如果我的问题需要更多解释,请提前询问并感谢。

我的印象是您使用的模型是问题的一部分。 你有

(:Route)-[:USES_STATION]->(:Station)

而实际上两个 (:Station) 节点之间的连接是路线的一部分。

您尝试过以下模型吗?

(:Station)-[:START]->(:Connection)-[:END]->(:Station)

结合

(:Connection)-[:IS_PART_OF]->(:Route) 

然后可以沿着这些线找到所有的 (:Route) 节点

// get you start and end point
WITH start,end    

// find the itineraries
MATCH itinerary=(start)-[:START|END*]->(end)

// find the connection nodes on the itineraries
WITH itinerary, [n IN nodes(itinerary) WHERE n:Connection] AS connections

// find the routes to which the connections belong
UNWIND connections AS connection
MATCH (connection)-[:IS_PART_OF]->(r:Route)
WITH itinerary,COLLECT(DISTINCT r.name) AS routes
RETURN routes