如何使用 java 插件在 Neo4j 中 return 节点邻居?
How to return node neighbours in Neo4j using java plugin?
在 Cypher 中返回的邻居看起来像这样:
START n=node({nodeId}) MATCH n--m RETURN m;
我努力创建一个具有相同功能的 Java 插件。之后我想看看返回的邻居的属性等等。这是我尝试获取关系及其端节点的代码。我究竟做错了什么?我只返回节点本身,但没有返回 "while-Loop".
import java.util.Iterator;
import java.util.stream.Stream;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.ResourceIterator;
import org.neo4j.logging.Log;
import org.neo4j.procedure.*;
import org.neo4j.procedure.Description;
import org.neo4j.procedure.Name;
public class Correlation {
@Context
public GraphDatabaseService db;
@Context
public Log log;
@UserFunction(value = "boris.getNeighbours")
@Description("boris.getNeighbours- finds Nodes one step away")
public Node passName2(@Name("nodeId") long nodeId)
{
Node node = db.getNodeById( nodeId );
Iterable<Relationship> rels = node.getRelationships();
Iterator<Relationship> I_rel = rels.iterator();
while (I_rel.hasNext()) {
Relationship rel = I_rel.next();
Node endNode = rel.getEndNode();
return endNode;
}
return node;
}
}
这个有效:
public class NodeFinder {
@Context
public GraphDatabaseService db;
@Context
public Log log;
@Procedure
@Description("finds Nodes one step away")
public Stream<NodeResult> passName2(@Name("nodeId") long nodeId)
{
Node node = db.getNodeById(nodeId);
Iterable<Relationship> rels = node.getRelationships();
Stream<Relationship> relsStream = StreamSupport.stream(rels.spliterator(), false);
Stream<NodeResult> myNodes = relsStream.map(r -> new NodeResult(r));
return myNodes;
}
public class NodeResult
{
//What i return
public Node node;
//Constructor
public NodeResult(Relationship item)
{
this.node = item.getEndNode();
}
}
}
在 Cypher 中返回的邻居看起来像这样:
START n=node({nodeId}) MATCH n--m RETURN m;
我努力创建一个具有相同功能的 Java 插件。之后我想看看返回的邻居的属性等等。这是我尝试获取关系及其端节点的代码。我究竟做错了什么?我只返回节点本身,但没有返回 "while-Loop".
import java.util.Iterator;
import java.util.stream.Stream;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.ResourceIterator;
import org.neo4j.logging.Log;
import org.neo4j.procedure.*;
import org.neo4j.procedure.Description;
import org.neo4j.procedure.Name;
public class Correlation {
@Context
public GraphDatabaseService db;
@Context
public Log log;
@UserFunction(value = "boris.getNeighbours")
@Description("boris.getNeighbours- finds Nodes one step away")
public Node passName2(@Name("nodeId") long nodeId)
{
Node node = db.getNodeById( nodeId );
Iterable<Relationship> rels = node.getRelationships();
Iterator<Relationship> I_rel = rels.iterator();
while (I_rel.hasNext()) {
Relationship rel = I_rel.next();
Node endNode = rel.getEndNode();
return endNode;
}
return node;
}
}
这个有效:
public class NodeFinder {
@Context
public GraphDatabaseService db;
@Context
public Log log;
@Procedure
@Description("finds Nodes one step away")
public Stream<NodeResult> passName2(@Name("nodeId") long nodeId)
{
Node node = db.getNodeById(nodeId);
Iterable<Relationship> rels = node.getRelationships();
Stream<Relationship> relsStream = StreamSupport.stream(rels.spliterator(), false);
Stream<NodeResult> myNodes = relsStream.map(r -> new NodeResult(r));
return myNodes;
}
public class NodeResult
{
//What i return
public Node node;
//Constructor
public NodeResult(Relationship item)
{
this.node = item.getEndNode();
}
}
}