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 中有多个不相关的查询?的主要内容,如果未能解决你的问题,请参考以下文章