我有一个存储在Neo4j中的嵌套树。每个节点可以与其他节点有(n)-[:CHILD]->(c)
关系。允许您使用MATCH (n)-[c:CHILD*]-(m)
从给定节点查询整个树。通过嵌套层次结构存储用户遍历路径
我有,是搞清楚如何存储路径,用户需要为他们走过一棵树什么麻烦。例如,返回路径的查询将是(user)-[:USER_PATH*]->(node)
。
但是路径必须保持沿:CHILD
关系的线条,它不能跳的分支之外。用户路径不能从一个分支的叶子跳到另一个分支的叶子,而不是先回缩它的路径,直到它找到一个分叉到它。
此外,我不认为最短路径,将工作,因为它不是我想要的最短路径,我希望用户实际路径。但它应该忽视用户退出任何分支机构时放弃的关系。它不应该离开死路。
我怎么能每个节点走到后更新图表,所以这些规则留在机智?
可以假定,在向下钻取一个新的分支,它只能通过一步一个多组兄弟姐妹。然而,它所经过的所有分支仍然是开放的,因此可以选择他们的兄弟姐妹。
最好的我可以计算的是,它需要:只要能
- “喜欢”走
:USER_PATH
关系 - ,直到它需要打破这条道路才能到新节点
- 此时它创建任何新的关系
- 然后删除任何旧的关系不再是路径上
我不知道如何做到这一点。
我花了大量的时间在试错法和谷歌搜索无济于事。
在此先感谢!
按照下面提供的图像:
- 红色节点=用户
- 绿色节点= A有效的节点成为新的 “目标”
- 蓝色节点=无效目标节点
因此,如果您要退出当前的叶节点,它会删除链中的最后一个:RATIONAL_PATH关系。
另外的路径应该调整到任何被选中的绿色节点,但保持现有的:RATIONAL_PATH机智为尽可能。
对于RATIONAL_PATH关系应该是什么路径,或者应该如何生成RATIONAL_PATH关系,我还是比较模糊......这些个别关系是由其他某种过程选择的吗?或者你是否试图从“MATCH(n) - [c:CHILD *] - (m)'种类的查询中推断它们? – InverseFalcon
这听起来像是你想要的最终结果是单个路径:RATIONAL_PATH关系到某个最终节点,并且你想要一种方式来清理用户探索但返回的路径。那是你的追求?我假设退出过程将创建:RATIONAL_PATH关系的方向返回到前面的节点(与它们来自的方向相反)。你想在什么时候尝试清理无关路径? – InverseFalcon
是,单个:从根节点到树中某个节点的RATIONAL_PATH路径。但是,当他们导航时,我不想回到相反的方向,而是想删除这个关系,以便提供从根到目标的单向路径节点,我宁愿删除那个距离太远的关系开始。 –