java - Neo4J TraversalDescription 定义

标签 java neo4j graph-traversal

我正在尝试创建将执行以下搜索的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/

相关文章:

algorithm - 何时终止在无限网格中搜索路径

java - Android 应用程序中 Spring RestTemplate 的奇怪问题

java - 检查从 arrayadapter 获取的复选框

node.js - 在 Node.js 中的 Cypher REST API 中向 Neo4j 提供 'query' 参数的正确方法

java - Neo4j-带有if else条件的密码查询中的多个匹配语句

graph - Tinkerpop/Gremlin 广度第一次遍历

java - 原始类型,泛型,应该被参数化

java - 使用 Eclipse JDT 查找特定节点内可见的所有标识符

neo4j 为现有节点生成唯一 ID

python - 如何有效地找到有向无环图中由k个节点组成的所有路径?