0

我正在使用带有 neo4j 的 spring 执行查询。

@Query(value = "START me=node({0}) MATCH me-[:ACTIVEFRIEND*1..{1}]->friend RETURN friend")
public Iterable<User> searchUserInNHops(User a, int hops);

其中搜索应该去的深度阈值作为输入跳数给出。

它不工作并给出错误。服务器遇到内部错误,阻止它完成此请求请求处理失败;嵌套异常是 org.neo4j.rest.graphdb.RestResultException:MATCH 中不允许模式元素的属性

Neo4j 版本:1.9.0

如果有人可以帮助我,我将不胜感激。

谢谢赫曼特

4

1 回答 1

0

您不能将深度指定为参数。如果您希望这是动态的,您可能需要考虑其他方法。他们之中有一些是:

  • 让您的存储库类从 CypherDslRepository 扩展。使用应该使用 neo4j-cypher-dsl 模块来构建查询对象。
  • 使用 Neo4jTemplate 类。您可以向查询方法提供组合查询字符串。
  • 使用 Neo4j 核心的遍历 API,比如

遍历:

   for (final Path position : Traversal.description().depthFirst()                    .relationships(RelationType.ACTIVE_FRIEND, Direction.OUTGOING),
       Direction.INCOMING).evaluator(Evaluators.fromDepth(1))
       .evaluator(Evaluators.toDepth(yourDynamicValue))
       .evaluator(Evaluators.excludeStartPosition()).traverse(node)) {
       position.endNode();
}
于 2013-03-12T10:57:40.777 回答