我想使用嵌入式Neo4j Java API为关系添加权重。使用neo4j嵌入式java API添加权重
例如:A
知道B
非常好,所以他们的关系应该加权5
。另一方面,A
知道C
很少,所以他们的关系应加权1
。
我该怎么做?
PS:我已经在这里试过这个例子:http://neo4j.com/docs/stable/tutorials-java-embedded-graph-algo.html,但它不能识别第createNode("name", "A", "x", 0d, "y", 0d)
和createRelationship(nodeA, nodeC, "length", 2d)
的第n个功能。
这是代码:
package com.neo4j.test.test1;
import org.neo4j.graphalgo.CommonEvaluators;
import org.neo4j.graphalgo.EstimateEvaluator;
import org.neo4j.graphalgo.GraphAlgoFactory;
import org.neo4j.graphalgo.PathFinder;
import org.neo4j.graphalgo.WeightedPath;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.PathExpanders;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import com.neo4j.test.labels.NodeLabels;
import com.neo4j.test.labels.TypeRelation;
public class Test1 {
public static void main(String[] args) {
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db = dbFactory.newEmbeddedDatabase("C:\\Zakaria\\NeoTests\\Test2");
try (Transaction tx = db.beginTx()) {
Node nodeA = createNode("name", "A", "x", 0d, "y", 0d);
Node nodeB = createNode("name", "B", "x", 7d, "y", 0d);
Node nodeC = createNode("name", "C", "x", 2d, "y", 1d);
Relationship relAB = createRelationship(nodeA, nodeC, "length", 2d);
Relationship relBC = createRelationship(nodeC, nodeB, "length", 3d);
Relationship relAC = createRelationship(nodeA, nodeB, "length", 10d);
EstimateEvaluator<Double> estimateEvaluator = new EstimateEvaluator<Double>()
{
@Override
public Double getCost(final Node node, final Node goal)
{
double dx = (Double) node.getProperty("x") - (Double) goal.getProperty("x");
double dy = (Double) node.getProperty("y") - (Double) goal.getProperty("y");
double result = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
return result;
}
};
PathFinder<WeightedPath> astar = GraphAlgoFactory.aStar(
PathExpanders.allTypesAndDirections(),
CommonEvaluators.doubleCostEvaluator("length"), estimateEvaluator);
WeightedPath path = astar.findSinglePath(nodeA, nodeB);
tx.success();
}
System.out.println("Done!");
}
}
它应该给这样的结果:
它说,以下这些功能都没有定义:
Node nodeA = createNode("name", "A", "x", 0d, "y", 0d);
Node nodeB = createNode("name", "B", "x", 7d, "y", 0d);
Node nodeC = createNode("name", "C", "x", 2d, "y", 1d);
Relationship relAB = createRelationship(nodeA, nodeC, "length", 2d);
Relationship relBC = createRelationship(nodeC, nodeB, "length", 3d);
Relationship relAC = createRelationship(nodeA, nodeB, "length", 10d);
谢谢!
请发布您尝试过的代码,以及它产生的任何错误消息。 – amphetamachine 2015-02-24 16:24:46
@amphetamachine请检查更新! – user1885868 2015-02-24 16:36:14