假设我在图表中有以下路径:
(:Type1)()-[:RelType2]->(:Type2)-[:RelType1]->(:Type1)
给定 (:Type1) 左侧的 (:Type1) 节点,我能够在路径上方 MATCH 并在右侧获得相应的 (:Type1) 节点(注意路径是对称的,其中心是节点 (centernode) ) . 在我的用例中,我们获得 的 (:Type1) 节点,在另一侧获取相应的 (:Type1) 节点,然后进一步处理 .
但是,我可能会得到 (:Type1) 的两个节点的 . 在这种情况下,将从相应的节点开始单独的查询,并将评估到另一侧的 (:Type1) 节点,因此将在两个节点上继续执行 .
Q1. 如何避免处理两个节点 . 也就是说,如果给出位于同一路径极端的两个 (:Type1) 节点,我怎样才能确保只执行从另一侧节点匹配的其中一个节点开始的一个查询,以便只有其中一个节点进一步处理并且其他节点被称为保持在临时缓冲区中以便随后处理(如果第一节点的处理失败) .
Added fact: 上面我有一条路径,两端有两个 (:Type1) 节点 . 我可能有三个或更多路径从 (centernode) 发出并在 (:Type1) 节点结束 . 因此,我希望首先处理这些 (:Type1) 节点中的一个节点,并且只有在早期处理失败时才会处理下一个 (:Type1) 节点 .
Q2. 这种情况甚至可以用纯密码进行吗?或者我必须最终使用Neo4J Traversal API?如果是,如何做到这一点,因为我必须确保在两个不同的traveresals访问的节点/关系的唯一性 .
Q3. 如何在Traversal API中添加路径扩展器以匹配 (:Type1)
at each traversal `next()`
if (node is of Type1)
follow
if (node is of Type2)
follow
(上面是伪代码 . 我是Traversal API的新手 . 我已经浏览了所有文档和示例 . 所以我猜测扩展器内部我必须放置 if() 过滤器来检查当前节点类型并决定接下来扩展哪种关系类型及其方向 . 以上伪代码用于表示 . )
这是如何在Traversal API中编写这样的密码吗?还是有更好的方法吗?