java - Neo4j Traverser - 只需获取特定类型的项目

标签 java neo4j traversal

从任何给定的节点开始,我想运行遍历器,直到它到达类型为“contentpage”的节点(所有节点都有类型属性)。

我已经用以下遍历器尝试过

{
    "order":"depth first",
    "uniqueness" : "node global",
    "relationships":[
        {"type":"CONTAINS","direction":"in"},
        {"type":"HAS","direction":"in"}
    ],
    "prune evaluator":{"language":"javascript","body":"position.endNode().getProperty('type')!='contentpage';"},
    "max depth":10000000
}

但我得到的只是 HTTP 错误 500。 有什么想法吗?

编辑:这是一个堆栈跟踪(我对它进行了一些修剪,因为它很大)

Problem accessing /db/data/node/782350/traverse/node. Reason:

    javax.script.ScriptException: sun.org.mozilla.javascript.WrappedException: Wrapped org.neo4j.graphdb.NotFoundException: type property not found for NodeImpl#782348. (<Unknown Source>#1) in <Unknown Source> at line number 1
Caused by:

org.neo4j.server.rest.domain.EvaluationException: javax.script.ScriptException: sun.org.mozilla.javascript.WrappedException: Wrapped org.neo4j.graphdb.NotFoundException: type property not found for NodeImpl#782348. (<Unknown Source>#1) in <Unknown Source> at line number 1
    at org.neo4j.server.rest.domain.EvaluatorFactory$CompiledScriptExecutor.eval(EvaluatorFactory.java:183)
    at org.neo4j.server.rest.domain.EvaluatorFactory$ScriptedPruneEvaluator.pruneAfter(EvaluatorFactory.java:241)
    at org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl$WrappedPruneEvaluator.evaluate(TraversalDescriptionImpl.java:239)
    at org.neo4j.kernel.impl.traversal.MultiEvaluator.evaluate(MultiEvaluator.java:41)
    at org.neo4j.kernel.impl.traversal.TraversalBranchImpl.initialize(TraversalBranchImpl.java:93)
    at org.neo4j.kernel.impl.traversal.TraversalBranchImpl.next(TraversalBranchImpl.java:112)
    at org.neo4j.kernel.impl.traversal.StartNodeTraversalBranch.next(StartNodeTraversalBranch.java:50)
    at org.neo4j.kernel.PreorderDepthFirstSelector.next(PreorderDepthFirstSelector.java:48)
    at org.neo4j.kernel.impl.traversal.TraverserImpl$TraverserIterator.fetchNextOrNull(TraverserImpl.java:127)
    at org.neo4j.kernel.impl.traversal.TraverserImpl$TraverserIterator.fetchNextOrNull(TraverserImpl.java:94)
    at org.neo4j.helpers.collection.PrefetchingIterator.hasNext(PrefetchingIterator.java:55)
    at org.neo4j.server.rest.web.DatabaseActions.traverse(DatabaseActions.java:922)
    at org.neo4j.server.rest.web.RestfulGraphDatabase.traverse(RestfulGraphDatabase.java:641)
    at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)

最佳答案

首先,看来你应该有

 "uniqueness" : "node global"

通常,您不能发送空值。如果您想要默认值,请不要设置任何内容。请参阅此处了解更多信息:Neo4j REST API .

编辑更新的问题:

所以异常说:

NotFoundException: type property not found for NodeImpl

其原因是:

position.endNode().getProperty('type')

要避免这种情况,请为该属性设置默认值,例如:

getProperty('type','')

关于java - Neo4j Traverser - 只需获取特定类型的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6408294/

相关文章:

java - 在 JAVA 中读取列表时,我们可以使用 .contains(BigDecimal.ZERO) 吗?

java: bind exception address in use 未使用时报错(netstat显示)

java - 在 Spring 中处理请求之前显示等待页面

neo4j - 如何使用 Cypher/Neo4J 获取所有节点或给定标签的所有属性键?

node.js - 使用 Node.js 进行 Neo4j 查询

java - java中遍历对象

javascript - 遍历 JavaScript 对象 - 我错过了什么?

java - 如何编写异常(类x抛出y)

neo4j - 嵌套 apoc 迭代与 apoc load jdbc 返回 "cannot conclude with CALL"消息

javascript - jQuery 遍历 - 查找当前输入的前一个标签