Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Traver中的setProperty之后显示错误的值_Java_Neo4j - Fatal编程技术网

Java 在Traver中的setProperty之后显示错误的值

Java 在Traver中的setProperty之后显示错误的值,java,neo4j,Java,Neo4j,下面是一个具有两种边的neo4j图。首先我们遍历边(BFS),然后对每种边的属性值进行规格化。但是,当在不同的循环中检索值时,会打印错误的值 这看起来很奇怪。也许我错过了什么。如果有的话,这将是非常有帮助的 有人让我纠正或建议我一个更好的方法来避免这个错误。提前感谢:) package org.neo4j.examples; 导入java.io.File; 导入java.util.HashMap; 导入org.neo4j.graphdb.Direction; 导入org.neo4j.graphd

下面是一个具有两种边的neo4j图。首先我们遍历边(BFS),然后对每种边的属性值进行规格化。但是,当在不同的循环中检索值时,会打印错误的值

这看起来很奇怪。也许我错过了什么。如果有的话,这将是非常有帮助的 有人让我纠正或建议我一个更好的方法来避免这个错误。提前感谢:)

package org.neo4j.examples;
导入java.io.File;
导入java.util.HashMap;
导入org.neo4j.graphdb.Direction;
导入org.neo4j.graphdb.GraphDatabaseService;
导入org.neo4j.graphdb.Node;
导入org.neo4j.graphdb.Path;
导入org.neo4j.graphdb.Relationship;
导入org.neo4j.graphdb.RelationshipType;
导入org.neo4j.graphdb.Transaction;
导入org.neo4j.graphdb.factory.GraphDatabaseFactory;
导入org.neo4j.graphdb.traversal.Evaluator;
导入org.neo4j.graphdb.traversal.Evaluators;
导入org.neo4j.graphdb.traversal.TraversalDescription;
导入org.neo4j.graphdb.traversal.Traverser;
导入org.neo4j.graphdb.traversal.university;
导入org.neo4j.kernel.Traversal;
公共类MyNeo4jExpt{
公共枚举RelTypes实现RelationshipType{
共同事件、运动
}
私有静态最终字符串MY\u TRAVERSAL\u DB=“target/MY TRAVERSAL DB”;
专用GraphDatabaseService graphDb;
静态节点shop1=null;
Node shop2=null;
Node shop3=null;
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
MyNeo4jExpt矩阵=新的MyNeo4jExpt();
matrix.setUp();
矩阵归一化(shop1);
matrix.shutdown();
}
公共作废设置(){
deleteFileOrDirectory(新文件(MY_TRAVERSAL_DB));
graphDb=新GraphDatabaseFactory()
.newEmbeddedDatabase(MY_TRAVERSAL_DB);
registerShutdownHook();
createNodespace();
}
公共空间关闭(){
graphDb.shutdown();
}
public void createNodespace(){
try(事务tx=graphDb.beginTx()){
//创建店铺1
shop1=graphDb.createNode();
店铺1.setProperty(“名称”、“家具店-1”);
//创建店铺2
shop2=graphDb.createNode();
店铺2.setProperty(“名称”、“家具店-2”);
//创建店铺3
shop3=graphDb.createNode();
店铺3.setProperty(“名称”、“家具店-3”);
////将shop1连接到shop2///////
关系rel=shop1.createRelationshipTo(shop2,
相关类型(共发生);
相对setProperty(“coOccurence”(双精度)5.0);
rel=shop1.createRelationshipTo(shop2,RelTypes.CAMPAIGN);
相对setProperty(“家具”(双)0.6);
相对setProperty(“椅子”(双)0.6);
相对setProperty(“表”,(双精度)0.6);
// ///////////////////////////////////////
////将shop1连接到shop3///////
rel=shop1.createRelationshipTo(shop3,RelTypes.CAMPAIGN);
相对setProperty(“家具”(双)0.7);
相对setProperty(“沙发”(双)0.7);
// ////////////////////////////////////////
////将shop3连接到shop2///////
rel=shop3.createRelationshipTo(shop2,RelTypes.CO_事件);
相对setProperty(“coOccurence”(双精度)4.0);
// ///////////////////////////////////////
成功();
}
}
//此函数调用给定节点上的BFS
//并规范化关系属性w.r.t
//右边缘类型(RelType)
私有遍历器规范化(最终节点){
Traverser friendsTraverser=null;
HashMap relHash=新HashMap();
try(事务tx=graphDb.beginTx()){
if(node==null){
System.out.println(“\n完整节点\n”);
返回null;
}
friendsTraverser=getFriends(节点);
if(friendsTraverser==null){
System.err.println(“空遍历器”);
返回null;
}
HashMap maxVal=新的HashMap();
字符串temp=“”;
try(事务tx2=graphDb.beginTx()){
for(路径friendPath:friendsTraverser){
System.out.println(“\nAt depth”+friendPath.length()
+“=>”+friendPath.toString());
//输出+=friendPath.startNode().getProperty(“名称”)+“”
// ;
for(Relationship rel:friendPath.relationships()){
temp=”“+rel.getStartNode().getProperty(“名称”);
for(字符串名称:rel.getPropertyKeys()){
Double propVal=(Double)rel.getProperty(name);
temp+=“--”+”(“+name+”,“+propVal+”);
if((maxVal.get(rel.getType())==null)
||(propVal>maxVal.get(rel.getType())){
maxVal.put(rel.getType(),propVal);//
  • 尝试删除内部事务,它们对您没有帮助
  • 当设置或打印出值时,还打印出节点和rel的id,以便您看到,您实际上正在查看相同的对象
  • package org.neo4j.examples;
    
    import java.io.File;
    import java.util.HashMap;
    
    import org.neo4j.graphdb.Direction;
    import org.neo4j.graphdb.GraphDatabaseService;
    import org.neo4j.graphdb.Node;
    import org.neo4j.graphdb.Path;
    import org.neo4j.graphdb.Relationship;
    import org.neo4j.graphdb.RelationshipType;
    import org.neo4j.graphdb.Transaction;
    import org.neo4j.graphdb.factory.GraphDatabaseFactory;
    import org.neo4j.graphdb.traversal.Evaluator;
    import org.neo4j.graphdb.traversal.Evaluators;
    import org.neo4j.graphdb.traversal.TraversalDescription;
    import org.neo4j.graphdb.traversal.Traverser;
    import org.neo4j.graphdb.traversal.Uniqueness;
    import org.neo4j.kernel.Traversal;
    
    public class MyNeo4jExpt {
        public enum RelTypes implements RelationshipType {
            CO_OCCURANCE, CAMPAIGN
        }
    
        private static final String MY_TRAVERSAL_DB = "target/my-traversal-db";
        private GraphDatabaseService graphDb;
    
        static Node shop1 = null;
        Node shop2 = null;
        Node shop3 = null;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MyNeo4jExpt matrix = new MyNeo4jExpt();
            matrix.setUp();
            matrix.normalizeRelations(shop1);
            matrix.shutdown();
        }
    
        public void setUp() {
            deleteFileOrDirectory(new File(MY_TRAVERSAL_DB));
            graphDb = new GraphDatabaseFactory()
                    .newEmbeddedDatabase(MY_TRAVERSAL_DB);
            registerShutdownHook();
            createNodespace();
        }
    
        public void shutdown() {
            graphDb.shutdown();
        }
    
        public void createNodespace() {
            try (Transaction tx = graphDb.beginTx()) {
    
                // Create shop1
                shop1 = graphDb.createNode();
                shop1.setProperty("name", "FurnitureShop-1");
    
                // create shop2
                shop2 = graphDb.createNode();
                shop2.setProperty("name", "FurnitureShop-2");
    
                // create shop3
                shop3 = graphDb.createNode();
                shop3.setProperty("name", "FurnitureShop-3");
    
                // ////// connect shop1 to shop2 ///////
                Relationship rel = shop1.createRelationshipTo(shop2,
                        RelTypes.CO_OCCURANCE);
                rel.setProperty("coOccurence", (Double) 5.0);
    
                rel = shop1.createRelationshipTo(shop2, RelTypes.CAMPAIGN);
                rel.setProperty("furniture", (Double) 0.6);
                rel.setProperty("chair", (Double) 0.6);
                rel.setProperty("table", (Double) 0.6);
                // ///////////////////////////////////////
    
                // ///// connect shop1 to shop3///////
                rel = shop1.createRelationshipTo(shop3, RelTypes.CAMPAIGN);
                rel.setProperty("furniture", (Double) 0.7);
                rel.setProperty("sofa", (Double) 0.7);
                // ////////////////////////////////////////
    
                // ////// connect shop3 to shop2 ///////
                rel = shop3.createRelationshipTo(shop2, RelTypes.CO_OCCURANCE);
                rel.setProperty("coOccurence", (Double) 4.0);
                // ///////////////////////////////////////
    
                tx.success();
            }
        }
    
        // this function calls a BFS on the given node
        // and normalize relation properties w.r.t. the
        // right edge type (RelType)
        private Traverser normalizeRelations(final Node node) {
            Traverser friendsTraverser = null;
            HashMap<Relationship, Path> relHash = new HashMap<Relationship, Path>();
            try (Transaction tx = graphDb.beginTx()) {
                if (node == null) {
                    System.out.println("\nNULL NODE\n");
                    return null;
                }
                friendsTraverser = getFriends(node);
    
                if (friendsTraverser == null) {
                    System.err.println("NULL TRAVERSER");
                    return null;
                }
    
                HashMap<RelationshipType, Double> maxVal = new HashMap<RelationshipType, Double>();
                String temp = "";
                try (Transaction tx2 = graphDb.beginTx()) {
                    for (Path friendPath : friendsTraverser) {
                        System.out.println("\nAt depth " + friendPath.length()
                                + " => " + friendPath.toString());
                        // output += friendPath.startNode().getProperty("name")+ " "
                        // ;
                        for (Relationship rel : friendPath.relationships()) {
                            temp = " " + rel.getStartNode().getProperty("name");
                            for (String name : rel.getPropertyKeys()) {
                                Double propVal = (Double) rel.getProperty(name);
                                temp += "---" + "(" + name + ", " + propVal + ")";
                                if ((maxVal.get(rel.getType()) == null)
                                        || (propVal > maxVal.get(rel.getType()))) {
                                    maxVal.put(rel.getType(), propVal); // <----
                                                                        // Save the
                                                                        // Max Value
                                                                        // for
                                                                        // Particular
                                                                        // Rel Type
                                }
                            }
    
                            temp += "----" + rel.getEndNode().getProperty("name")
                                    + "\n";
    
                        }
                        // numberOfFriends++;
                        System.out.println(temp);
                    }
                    tx2.success();
                }
                System.out.println("*************************************");
                System.out.println("**** Devide w.r.t maxVal = "
                        + maxVal.entrySet()
                        + "And Normalized Values Are:*************");
                System.out.println("*************************************");
                temp = "";
                for (Path friendPath : friendsTraverser) {
                    System.out.println("\nAt depth " + friendPath.length() + " => "
                            + friendPath.toString());
                    for (Relationship rel : friendPath.relationships()) {
                        temp = "" + rel.getStartNode().getProperty("name");
                        try (Transaction tx3 = graphDb.beginTx()) {
                            for (String propName : rel.getPropertyKeys()) {
                                Double propVal = (Double) rel.getProperty(propName)
                                        / maxVal.get(rel.getType());
                                rel.setProperty(propName, propVal);
                                temp += "---" + "(" + propName + ", "
                                        + rel.getProperty(propName) + ")";
                            }
                            tx3.success();
                        }
                        temp += "----" + rel.getEndNode().getProperty("name")
                                + "\n";
                    }
                    System.out.println(temp);
                }
                tx.success();
    
            }
            System.out
                    .println("\n+++++++++++++NOW WRONG VALUES WILL BE PRINTED+++++++++++++++");
            try (Transaction tx = graphDb.beginTx()) {
                String temp = "";
                for (Path friendPath : friendsTraverser) {
                    System.out.println("\nAt depth " + friendPath.length() + " => "
                            + friendPath.toString());
                    for (Relationship rel : friendPath.relationships()) {
                        temp = " " + rel.getStartNode().getProperty("name");
                        for (String propName : rel.getPropertyKeys()) {
                            temp += "---" + "(" + propName + ", "
                                    + rel.getProperty(propName) + ")";
                        }
                        temp += "----" + rel.getEndNode().getProperty("name")
                                + "\n";
                    }
                    System.out.println(temp);
                }
                tx.success();
            }
            return friendsTraverser;
        }
    
        // START SNIPPET: get-friends
        private static Traverser getFriends(final Node person) {
            TraversalDescription td = Traversal.description().breadthFirst()
                    .relationships(RelTypes.CAMPAIGN, Direction.BOTH)
                    .relationships(RelTypes.CO_OCCURANCE, Direction.BOTH)
                    .evaluator(Evaluators.toDepth(10))
                    .evaluator(Evaluators.excludeStartPosition())
                    .uniqueness(Uniqueness.RELATIONSHIP_GLOBAL);
            return td.traverse(person);
        }
    
        // END SNIPPET: get-friends
    
        private void registerShutdownHook() {
            // Registers a shutdown hook for the Neo4j instance so that it
            // shuts down nicely when the VM exits (even if you "Ctrl-C" the
            // running example before it's completed)
            Runtime.getRuntime().addShutdownHook(new Thread() {
                @Override
                public void run() {
                    graphDb.shutdown();
                }
            });
        }
    
        private static void deleteFileOrDirectory(final File file) {
            if (!file.exists()) {
                return;
            }
    
            if (file.isDirectory()) {
                for (File child : file.listFiles()) {
                    deleteFileOrDirectory(child);
                }
            } else {
                file.delete();
            }
        }
    }
    
    At depth 1 => (0)--[CAMPAIGN,1]-->(1)
     FurnitureShop-1---(furniture, 0.6)---(chair, 0.6)---(table, 0.6)----FurnitureShop-2
    
    
    At depth 1 => (0)--[CAMPAIGN,2]-->(2)
     FurnitureShop-1---(furniture, 0.7)---(sofa, 0.7)----FurnitureShop-3
    
    
    At depth 1 => (0)--[CO_OCCURANCE,0]-->(1)
     FurnitureShop-1---(coOccurence, 5.0)----FurnitureShop-2
    
    
    At depth 2 => (0)--[CAMPAIGN,1]-->(1)<--[CO_OCCURANCE,3]--(2)
     FurnitureShop-3---(coOccurence, 4.0)----FurnitureShop-2
    
    *************************************
    **** Devide w.r.t maxVal = [RelationshipTypeToken[name:CO_OCCURANCE, id:0]=5.0, RelationshipTypeToken[name:CAMPAIGN, id:1]=0.7]And Normalized Values Are:*************
    *************************************
    
    At depth 1 => (0)--[CAMPAIGN,1]-->(1)
    FurnitureShop-1---**(furniture, 0.8571428571428572)---(chair, 0.8571428571428572)---(table, 0.8571428571428572)**----FurnitureShop-2
    
    
    At depth 1 => (0)--[CAMPAIGN,2]-->(2)
    FurnitureShop-1---(furniture, 1.0)---(sofa, 1.0)----FurnitureShop-3
    
    
    At depth 1 => (0)--[CO_OCCURANCE,0]-->(1)
    FurnitureShop-1---(coOccurence, 1.0)----FurnitureShop-2
    
    
    At depth 2 => (0)--[CAMPAIGN,1]-->(1)<--[CO_OCCURANCE,3]--(2)
    FurnitureShop-3---(coOccurence, 0.8)----FurnitureShop-2
    
    
    +++++++++++++NOW **WRONG VALUES** WILL BE PRINTED+++++++++++++++
    
    At depth 1 => (0)--[CAMPAIGN,1]-->(1)
     FurnitureShop-1---**(furniture, 1.2244897959183676)---(chair, 1.2244897959183676)**---(table, 1.2244897959183676)----FurnitureShop-2
    
    
    At depth 1 => (0)--[CAMPAIGN,2]-->(2)
     FurnitureShop-1---(furniture, 1.0)---(sofa, 1.0)----FurnitureShop-3
    
    
    At depth 1 => (0)--[CO_OCCURANCE,0]-->(1)
     FurnitureShop-1---(coOccurence, 1.0)----FurnitureShop-2
    
    
    At depth 2 => (0)--[CAMPAIGN,1]-->(1)<--[CO_OCCURANCE,3]--(2)
     FurnitureShop-3---(coOccurence, 0.8)----FurnitureShop-2