在Neo4j中,在使用JavaAPI时,是否有任何方法限制路径中的节点和关系类型?
我有源节点和目标节点,我想限制路径中的节点和关系类型。我正在使用 以下面的玩具为例 我们有三个人节点A、B和C 源节点:A和目标节点:B。它们之间可能存在许多其他类型的路径。我想将路径限制为特定格式,如-在Neo4j中,在使用JavaAPI时,是否有任何方法限制路径中的节点和关系类型?,java,neo4j,graph-databases,pathfinder,neo4j-java-api,Java,Neo4j,Graph Databases,Pathfinder,Neo4j Java Api,我有源节点和目标节点,我想限制路径中的节点和关系类型。我正在使用 以下面的玩具为例 我们有三个人节点A、B和C 源节点:A和目标节点:B。它们之间可能存在许多其他类型的路径。我想将路径限制为特定格式,如- (个人)-[worksAt]->(公司)-[CompetitorOf]->(公司)从你的问题来看,你实际上在计算什么并不清楚。你是否有A和B,想知道他们的公司是否是竞争对手?你有C语言,想知道他们的朋友中有谁在竞争对手的公司工作吗 无论如何,如果您使用的是遍历API(您谈论的是路径),那么您可
(个人)-[worksAt]->(公司)-[CompetitorOf]->(公司)从你的问题来看,你实际上在计算什么并不清楚。你是否有A和B,想知道他们的公司是否是竞争对手?你有C语言,想知道他们的朋友中有谁在竞争对手的公司工作吗
无论如何,如果您使用的是遍历API(您谈论的是路径),那么您可以编写一个自定义,它将使用中的来确定下一种要遍历的关系类型
如果您只是手动遍历这些关系,我看不出有什么问题:只需在每一步使用适当的参数调用即可
与您在Cypher中所做的相反,您没有在路径中声明要查找的模式,您只需计算路径以遵循所需的模式。在仔细阅读并使用我得到的以下解决方案的代码进行实验后-
要筛选通过创建自定义路径探索的路径,请使用
在我们的示例中,sourceNode
将是节点“A”,而targetNode
将是节点“B”
PathExpanderBuilder pathExpanderBuilder = PathExpanderBuilder.empty();
pathExpanderBuilder.add(RelationshipType.withName("worksat"), Direction.OUTGOING);
pathExpanderBuilder.add(RelationshipType.withName("competitorof"), Direction.BOTH);
pathExpanderBuilder.add(RelationshipType.withName("worksat"), Direction.INCOMING);
PathExpander<Object> pathExpander pathExpander = pathExpanderBuilder.build();
PathFinder<Path> allPathFinder = GraphAlgoFactory.allSimplePaths(this.pathExpander, 4);
Iterable<Path> allPaths = allPathFinder.findAllPaths(sourceNode, targetNode);