我使用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函数声明中的关系。有没有像" @ Depth"注释给出方向?
答案 0 :(得分:2)
目前无法通过注释声明更细粒度的查询。实际上,在代码中有一些关于(不)遵循某些路径的提示可能对特定用例有用,但与其他用例无关。
查看JPA上的示例:您可以使用注释来急切地加载依赖对象。但是,一旦应用程序增长,您必须管理 FetchProfiles 或 NamedEntityGraphs 以根据用例处理您获取的方式。
这就是为什么,使用SDN 4.x,这样做的首选方法是使用自定义密码查询。它将确保您以高效的方式仅获取所需的数据。
跟踪此here存在问题。 请注意,这是OGM / SDN下一个主要版本计划的改进之一。 如果您有特定用例需要解决或围绕此问题提出意见,请随时在松弛渠道neo4j-users上开启讨论。