【发布时间】:2015-02-06 11:08:17
【问题描述】:
我想遍历一个图并返回链接 2 个节点的所有路径,其中第一个关系是传出的,第二个是传入的。例如,如果关系已投票并且我想查看从节点 25 到节点 86 的所有可能路径,我有 MATCH p=((n {id:"25"}) -[*1..2]-> (m {id:"86"})) RETURN p; 然后我想检查在返回的路径中我是否在传出和传入关系中具有相同类型的属性(如果他们有相同的投票)。
我尝试使用 java 中的图形遍历 api 来实现这一点,但我得到的只是一条路径我怎样才能获得所有可能的路径以检查它们?
{它基本上是一个检查所有常见邻居关系的问题}
int common = 0;
int diff = 0;
for ( Path position : graphDb.traversalDescription()
.relationships(Wikilections_user.RelTypes.Voted, Direction.OUTGOING)
.relationships(Wikilections_user.RelTypes.Voted, Direction.INCOMING)
// .evaluator(Evaluators.fromDepth(1))
.evaluator(Evaluators.toDepth(2))
.evaluator(Evaluators.includeWhereEndNodeIs(node2))
// .evaluator(Evaluators.excludeStartPosition())
.traverse(node1))
{
Iterable<Relationship> myRels = position.reverseRelationships();
for (Relationship temp : myRels) {
System.out.println((temp.getStartNode()).getProperty("id") + " with " + temp.getProperty("with") + " :" + (temp.getEndNode()).getProperty("id"));
}
String with = "";
int i = 0;
for (Relationship temp : myRels) {
if (i == 0) {
with = (String) temp.getProperty("with");
i++;
}
if (i == 1) {
if (((String) temp.getProperty("with")).equals(with)) {
common++;
} else {
diff++;
}
}
}
}
return (double) common * 100 / (common + diff);
【问题讨论】: