Neo4j - 如何保存密码查询的结果以便以后使用?

时间:2016-12-08 04:32:05

标签: neo4j cypher

我在neo4j浏览器中运行不同类型的cypher查询来检查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或maintaning:Person(mark)index的所有节点)

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

1 个答案:

答案 0 :(得分: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