代码之家  ›  专栏  ›  技术社区  ›  Grapheneer

如何使用java插件在Neo4j中返回节点邻居?

  •  1
  • Grapheneer  · 技术社区  · 7 年前

    在Cypher,返回的邻居看起来是这样的:

    START n=node({nodeId}) MATCH n--m RETURN m;
    

    我努力创建一个同样的Java插件。然后我想看看返回的邻居的属性等等。这是我的代码,我试图从中获取关系及其端点。我做错了什么?我只从“while循环”返回了节点本身,但什么也没有返回。

    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;
    }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Grapheneer    7 年前

    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();
         }
    
    }
    }