我正在使用Neo4J构建一个简单的应用程序,并且我正在使用Java API。
我的图表中有两个节点标签 1.班级 2.实例
我想获得两个节点之间的最短路径,(a:实例)和(b:实例)
假设连接节点有2条路径。
路径1:
<div class="left-side">
<ul>
<li>item 1</li>
<li>item 1</li>
<li>item 1</li>
<li>item 1</li>
<li>item 1</li>
<li>item 1</li>
<li>item 1</li><li>item 1</li>
<li>item 1</li>
</ul>
</div>
<div class="right-side">
Content container
</div>
路径2:
(a:Instance)-[:is_a]->(x:Class)<-[:is_a]-(b:Instance)
我想要的结果是路径2 。我希望路径只涉及具有实例标签的节点。或者,如果我不能这样做,我希望路径不包含 is_a 关系类型。
我目前的代码是这样的:
(a:Instance)-[:relType1]->(z:Instance)-[:relType2]->(y:Instance)<-[relType3]-(b:Instance)
在PathExpanders中,我没有看到存在特定节点标签的过滤器。而且我也没有在PathExpander中看到可以包含所有关系类型除了一种特定的关系类型。
有没有办法实现呢? 我只是不想要一个带有 Class 标签的节点,或者我的路径中存在与 is_a 类型的关系。
抱歉我的英文
谢谢
答案 0 :(得分:1)
我解决了它
我使用 PathExpanderBuilder 来构建我自己的PathExpander。首先,我将PathExpander设置为涵盖所有类型和方向。之后,我从扩展器中删除了 is_a RelationshipType。
我的最终代码如下:
PathExpanderBuilder peBuilder = PathExpanderBuilder.allTypesAndDirections().remove(RelationshipType.withName(CommonCons.REL_IS_A));
PathFinder<Path> finder = GraphAlgoFactory.shortestPath(peBuilder.build(), CommonCons.MAX_HOP );
Node startNode;
Node endNode;
Path path = finder.findSinglePath(startNode, endNode);