java - 相当于cypher查询的遍历描述

标签 java neo4j cypher graph-traversal

我有一个密码查询,我正在尝试编写等效的遍历描述,但我被顺序困住了。

start n=node:EduNodes(title='bachelor of science')     
match p=n-[:JOB_CHANGE|EDUCATION|CAREER_ENTRY|EDUCATION_CONTINUED*1..4]->m     
with p, relationships(p) as rels, n, m     
return p,n,m,     
reduce(weight=0, x in rels: weight + x.weight) as totalWeight     
order by totalWeight asc    

这个查询非常耗内存而且慢,遍历说明很快:

TraversalDescription td = Traversal.traversal().evaluator(Evaluators.excludeStartPosition())
        .uniqueness(Uniqueness.NONE).depthFirst()
        .evaluator(Evaluators.includingDepths(1, 4))
        .relationships(RelationshipTypes.JOB_CHANGE, Direction.OUTGOING)
        .relationships(RelationshipTypes.EDUCATION, Direction.OUTGOING)
        .relationships(RelationshipTypes.CAREER_ENTRY, Direction.OUTGOING)
        .relationships(RelationshipTypes.EDUCATION_CONTINUED, Direction.OUTGOING);

我可以在遍历描述中添加密码查询的最后两行(降序)吗?之后我可以自己循环完成它..

Traverser traverser = td.traverse(start);
List<PathWrapper> orderedTraversalResult = new ArrayList<>();
for (Path path : traverser) {
    orderedTraversalResult.add(new PathWrapper(path));
}
Collections.sort(orderedTraversalResult);

最佳答案

您可以提供自己的能够处理分支状态的PathEvaluator。这方面最好的资源是 Neo4j 本身的单元测试,请查看 https://github.com/neo4j/neo4j/blob/master/community/kernel/src/test/java/org/neo4j/kernel/impl/traversal/TestBranchState.java .

关于java - 相当于cypher查询的遍历描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761574/

相关文章:

java - 刚刚创建了一个新的 android 应用程序项目,当我尝试运行简单的 hello world 它有一个错误

java - 无法迭代 ExecutionResult

Neo4j http.log 为空

neo4j - 是否可以根据密码查询中的某些条件创建变量并进行分配?

java - 为什么我的 ListView 仅在单击其文本时才响应?

java - 我应该在 Java POJO 上使用 "extends"来提取公共(public)属性吗?

neo4j - 如何在 Neo4j 2.0.0M5 中通过标签创建和检索节点

neo4j - 按动态计算或变量的结果对 Neo4j 密码结果进行排序

graph - Neo4J/密码 : How to filter the nodes of a path?

Java源1.8和目标1.6在maven中是否可能