我正在尝试创建将执行以下搜索的TraversalDescription;
- 只返回具有特定属性的节点(“type”==“PERSON”)
- 返回一定数量的结果(整个图很大,我们只对局部图感兴趣)
- 可以使用任何关系类型
我还没有走得很远,我似乎无法弄清楚如何为节点属性创建一个 Evaluator;
TraversalDescription td = Traversal.description().bredthFirst().evaluator(?...);
最佳答案
我通过简单地实现 Evaluator 接口(interface)并覆盖 Evaluator.evaluate(Path p) 方法来解决这个问题;
public final class MyEvaluator implements Evaluator {
private int peopleCount;
private int maxPeople;
public MyEvaluator(int max) {
maxPeople = max;
peopleCount = 0;
}
public Evaluation evaluate(Path p) {
//prune if we have found the required number already
if(peopleCount >= maxPeople) return Evaluation.EXCLUDE_AND_PRUNE;
//grab the node of interest
Node n = p.endNode();
//include if it is a person
if(n.hasProperty("type") && (n.getProperty("type").equals(NodeTypes.PERSON.name()))) {
peopleCount++;
return Evaluation.INCLUDE_AND_CONTINUE;
}
// otherwise just carry on as normal
return Evaluation.EXCLUDE_AND_CONTINUE;
}
}
然后我的 TraversalDescription 定义最终看起来像这样:
TraversalDescription td = Traversal.description().breadthFirst().evaluator(new MyEvaluator(peopleRequired));
关于java - Neo4J TraversalDescription 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633940/