有效的Cypher查询,无需在Neo4j

时间:2018-03-15 15:51:46

标签: neo4j cypher

在这里,通过验证,我的意思是:
- 有效:返回记录 - 无效:查询返回的记录

neo4j中是否有内置函数,以便我可以在不运行查询的情况下快速验证查询。例如,模式检查等。

我想做什么
快速有效的大量查询,以便我可以获得结果查询。运行所有查询的问题是某些查询可能需要花费大量时间才能运行,这会阻止一些后续查询的运行。

临时解决方案
我发现的一种方法是在查询结束时使用LIMIT 1,当有大量记录时,它可能比没有它的那个快得多,但仍然在neo4j数据库中运行查询

谢谢,

2 个答案:

答案 0 :(得分:0)

一个选项是prepend your queries with EXPLAIN并执行该查询。 EXPLAIN用于生成查询的执行计划,但也会通过将查询与数据库统计信息进行比较来生成元数据。例如,如果您的查询包含在数据库中找不到的节点标签,则会在元数据中返回警告。执行计划还将包括每次操作时要返回的估计行。

在使用EXPLAIN添加查询时,您可以在Neo4j浏览器中查看所有这些元数据。使用其中一个Neo4j客户端驱动程序,您可以在ResultSummary object中访问此信息(例如,JavaScript驱动程序文档已链接)。

答案 1 :(得分:0)

查看查询是否会返回任何内容的唯一方法是实际运行它。但是您不必在实际("主要")数据库上运行它。

您可以针对数据模型与主数据库中的数据模型匹配的较小测试数据库运行查询。您还可以定制测试数据,以便提前知道您的查询应返回的内容。

为了简化这一过程,Neo4j Desktop可以方便地创建多个"项目",每个项目都有自己的数据库。

[EDITED]

为了使此过程更加自动化,您应该查看this example of using APOC procedures to export/import a DB subset。在您的情况下,您将从主DB导出并导入到空DB。该示例的Cypher代码随机选择有限数量的节点和关系进行复制,但您可能希望使用更复杂的Cypher代码来确保获得所需的数据。