Neo4j Cypher 中有多个不相关的查询?

Posted

技术标签:

【中文标题】Neo4j Cypher 中有多个不相关的查询?【英文标题】:Multiple unrelated queries in Neo4j Cypher? 【发布时间】:2014-03-13 18:13:46 【问题描述】:

http://localhost:7474/browser/ 不支持多个unrelated 查询吗?

这段代码:

MATCH (a cond:'1'), (b cond:'x') CREATE a-[:rel]->b
MATCH (a cond:'2'), (b cond:'y') CREATE a-[:rel]->b
MATCH (a cond:'3'), (b cond:'z') CREATE a-[:rel]->b

导致错误:

在 CREATE 和 MATCH 之间需要 WITH

但由于我的查询不相关,我认为我不需要WITH

如何在不输入一行的情况下进行上述操作?

【问题讨论】:

LazyWebCypher 也是发送多个查询的一种选择 【参考方案1】:

在最近的版本中,开发人员在 Neo4j 浏览器中添加了一个选项来执行多个查询。

打开浏览器设置并点击启用多语句查询编辑器

然后将分号放在每个查询的末尾,然后将它们全部扔到浏览器控制台中。

这是它的样子

【讨论】:

【参考方案2】:

您可以通过 cypher-shell 命令行工具向 Neo4j 发送多个查询:

cypher-shell --format plain < query.txt

其中 query.txt 包含多个用分号分隔的独立查询。一旦您启动了 cypher-shell,这也可以交互地工作。

【讨论】:

【参考方案3】:

作为一种解决方法,您可以这样做:

MATCH (a cond:'1'), (b cond:'x') CREATE a-[:rel]->b
WITH 1 as dummy
MATCH (a cond:'2'), (b cond:'y') CREATE a-[:rel]->b
WITH 1 as dummy
MATCH (a cond:'3'), (b cond:'z') CREATE a-[:rel]->b

另见导入博文:http://blog.neo4j.org/2014/01/importing-data-to-neo4j-spreadsheet-way.html

【讨论】:

请注意,WITH 1 as dummy 之后的子查询将在前面查询返回的每一行中执行一次。使用像WITH count(*) as dummy 这样的聚合函数将确保后续查询只执行一次。【参考方案4】:

我不知道通过 Neo4j 浏览器一次发送多个不相关查询的方法。但是在 REST 级别上,这完全可以通过使用 transactional HTTP endpoint 来实现。

【讨论】:

是否仍然无法通过 Cypher 并使用螺栓驱动器一次发送多个不相关的查询?我假设一次发送多个不相关的查询,比如 10 个,与一个一个发送 10 个查询相比(不是在数据库级别,而是从应用程序的角度) 当然,您可以使用 Bolt 发送多个密码查询。只需从您的驱动程序实例中获取多个会话实例。 我很好奇是否有办法用一个会话实例来做到这一点。我不想占用很多会话,因为它是一个 API,我希望会话可供其他客户端调用。如果有办法,我希望能够使用一个会话实例一次发送所有这些。如果您查看this question,我也将不胜感激

以上是关于Neo4j Cypher 中有多个不相关的查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何优化 Neo4J Cypher 查询?

Cypher语法

Neo4j/Cypher 测试数据请求

知识图谱Neo4j Cypher查询语言详解

Neo4j效率问题:Cypher查询永远运行

Neo4j cypher查询获取起始节点和结束节点之间的所有节点