我在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的所有节点)
我怎样才能以更优雅的方式做到这一点?
答案 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