2016-12-08 47 views
0

我在neo4j瀏覽器中運行不同種類的密碼查詢來檢查我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})........ 

但我認爲這是醜陋的,它會導致當多個用戶正在使用的數據庫的問題。並且還有額外的成本(掃描所有節點與標籤人或主要:人(標記)指數)

我怎樣才能以更優雅的方式做到這一點?

+0

你是如何使用Neo4j的?通過REST API,通過Java驅動程序等? –

+0

@GaborSzarnyas我正在使用「事務/提交」HTTP端點和REST API。 (實際上我只是在neo4j-browser中輸入命令,因爲它可以幫助我看到結果) – user2218067

回答

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 
相關問題