当前位置: 首页 > 知识库问答 >
问题:

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

习宸
2023-03-14

我使用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)

我找不到一种方法来指定,在我的例子中,我只希望在我的图形存储库接口的findByXXX函数声明中“传出”关系。有没有像“@深度”注释这样的参数来给出方向?

共有1个答案

郑哲彦
2023-03-14

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

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

这就是为什么SDN4。x、 执行此操作的首选方法是使用自定义密码查询。它将确保您以高效的方式仅获取所需的数据。

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

 类似资料:
  • 我试图编写一个返回大量数据(200个节点)的查询。节点非常简单: 我最初使用Spring Data Neo4j模板接口,但在返回大约100个节点后发现它非常慢。 所以,我的问题是:是否有一种方法可以提供标签作为Cypher查询的一部分,以防止需要再次查询每个节点?或者,除此之外,是否有一种方法可以为SDN提供一个包含标签和属性的并将其转换为POJO? 注意:我意识到SDN团队正在未来的版本中完全使

  • 太长别读:@Depth(value=-1)抛出空指针,忽略1以上的其他值 在我的Spring Boot with Neo4j项目中,我有3个简单的实体与关系: 我创建了一个简单的图,如下所示: 使用以下存储库: 以及以下代码: 要检索与上图所示相同的图表(取自实际的neo4j仪表板),我执行,其中包含,然后打印保存的度量和检索的度量: 无论深度的值如何,我都无法获取包含所有子节点的Metric节点

  • 本文向大家介绍C# DataTable中查询指定字段名称的数据,包括了C# DataTable中查询指定字段名称的数据的使用技巧和注意事项,需要的朋友参考一下 1.查询后获取对应的数据集后,传递参数strcodeName,根据数据集中strcodeName的匹配对应字段,获取数据集中对应的目的字段 2.默认赋值匹配字段,查询后获取目的字段

  • 如何为查询指定超时?我使用的是Oracle11g,我希望可以使用类似这样的东西。

  • 我是neo4j spring数据的新手,我尝试执行的查询不是在我的spring boot应用程序上工作,而是在neo4j web界面上工作。 我在数据库上有3个节点:“Oracle”、“Java”和“Cloud”我正在尝试运行的查询: 因此,使用neo4j web界面,如果我输入“CL”,它将返回“Oracle”和“Cloud”,这是正确的。 使用spring数据,我得到了所有3个结果,这是错误的

  • 我正在尝试使用neo4j构建一个推荐引擎,并使用spring-data-neo4j作为持久层。我发现spring数据执行的cypher查询会给出结果,但是对于重复的对象,使用相同的数据集在neo4j浏览器上执行的相同查询会产生预期的结果。 下面是执行的查询(我通过启用调试获得)匹配(u:User)-[r:RATED]-(m:Movie)-[:HAS\u Movie]-(g:Genre)-[:HAS