在深度 > 0 的 findBy Spring 数据 Neo4J 查询中指定方向

Specify the direction in findBy Spring data Neo4J queries with depth > 0

我使用 SDN 4.2.1 在 Neo4J 中保存和加载节点及其关系。

直到现在,我一直在使用深度参数等于 2 的 findByXXX 方法。现在我需要将深度增加到 3,但是查询速度太慢了,我知道为什么:执行的查询没有考虑关系的方向。

这是从日志中执行的查询(耗时超过 20 秒):

o.n.o.drivers.bolt.request.BoltRequest   : Request: MATCH (n:`Property`) WHERE n.`id` = { `id_0` } WITH n MATCH p=(n)-[*0..3]-(m) RETURN p, ID(n) with params {id_0=P31}

当我用方向 重写查询 时,它变得非常快:

MATCH (n:`Property`) WHERE n.`id` = "P31" WITH n MATCH p=(n)-[*0..3]->(m) RETURN p, ID(n)

我找不到一种方法来指定,在我的例子中,我只想在我的 GraphRepository 接口的 findByXXX 函数声明中使用 "outgoing" 关系。是否有像“@Depth”注解这样的参数来指明方向?

目前无法通过注释声明更细粒度的查询。实际上,在代码中有一些关于(不)遵循某些路径的提示可能对特定用例有好处,但对其他用例则无关紧要。

看看在 JPA 上做了什么:您可以使用注释来预先加载依赖对象。但是一旦应用程序增长,您必须管理 FetchProfilesNamedEntityGraphs 以根据用例处理您获取的方式。

这就是为什么使用 SDN 4.x 的首选方法是使用自定义密码查询。它将确保您以高效的方式只获取所需的数据。

跟踪这个问题 here。 请注意,这是为 OGM/SDN 的下一个主要版本计划的改进之一。 如果您有特定的用例需要解决或对此有想法,请随时在 Slack 频道上展开讨论 neo4j-users