Neo4J Java API - 特定节点标签的最短路径或排除特定关系

时间:2017-06-06 22:19:05

标签: java neo4j shortest-path

我正在使用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 类型的关系。

抱歉我的英文

谢谢

1 个答案:

答案 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);