【问题标题】:Neo4j - how to save result of cypher query to use it later?Neo4j - 如何保存密码查询的结果以供以后使用?
【发布时间】:2016-12-08 04:32:05
【问题描述】:

我在 neo4j 浏览器中运行不同类型的密码查询来检查我在 neo4j 图形数据库中的数据。这是一个离线分析工作,所以数据库是只读的(我可以写但不会有新数据)

我想要一个“neo4j 浏览器控制台会话”来保存查询结果以供以后使用,例如:

var Persons = match (j:Person)-[..........complex query running for a long time] return j

所以以后我可以运行多个查询(比前一个运行得更快),比如

start with Persons as p match (p)-[]->q...

我该怎么做?我知道我可以使用“with”将它们放在一起,但第一个慢查询会运行多次,我不希望这样。

目前我在我的节点上设置了一个属性来标记结果

match (j:Person)-[...complex] set j.mark=1
match (j:Person {mark:1})........

但我认为它很丑陋,并且在多个用户使用数据库时会引起问题。并且还有额外的成本(扫描所有带有标签的节点 Person 或维护 :Person(mark) index )

我怎样才能以更优雅的方式做到这一点?

【问题讨论】:

  • 你是如何使用 Neo4j 的?通过 REST API、通过 Java 驱动等?
  • @GaborSzarnyas 我正在使用“事务/提交”HTTP 端点和 REST API。 (实际上我只是在 neo4j-browser 中输入命令,因为它可以帮助我将结果可视化)

标签: neo4j cypher


【解决方案1】:

虽然在 Cypher 未实现 CACHE MATCH... 语句中,但您可以执行以下操作:

CREATE (CACHE:Cache {name: 'cachequery'}) WITH CACHE
match (j:Person)-[..........complex query running for a long time] 
MERGE (CACHE)-[:cacheContains]->(j)
return j

从缓存中获取数据:

MATCH (CACHE:Cache {name: 'cachequery'})-[:cacheContains]->(j)
WITH collect(j) as CACHE
...and do something with the data

或者你可以通过标签来做:

match (j:Person)-[..........complex query running for a long time] 
SET j :CacheQuery
return j

从缓存中获取数据:

MATCH (j:Person:CacheQuery)
WITH collect(j) as CACHE
...and do something with the data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多