2016-12-08 10 views
0

私はneo4jグラフデータベースで自分のデータを調べるために、neo4jブラウザでさまざまな種類のcypherクエリを実行しています。Neo4j - 後で使用するためのcypherクエリの結果を保存する方法は?

私は "neo4jブラウザコンソールセッション"を持って、後で使用するためにクエリの結果を保存したいと考えています:

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

ので、後に、私はこれを行うことができますどのように

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

のような(以前のものよりも速く走る)複数のクエリを実行できますか?私はそれらを一緒に置くために "と"使用することができますが、最初の低速のクエリは複数回実行され、私はそれを望んでいない知っている。

現在、私は

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

結果をマークするために、私のノードのプロパティを設定するしかし、私はそれが醜いだと思うし、それが複数のユーザーがデータベースを使用しているときに問題が発生します。また、余分なコストもあります(ラベルがPersonまたはmarktaningのすべてのノードをスキャンします:Person(マーク)インデックス)

もっとエレガントな方法でこれを行うにはどうすればよいですか?

+0

どのようにNeo4jを使用していますか? REST APIを通じて、Javaドライバなどを通じて? –

+0

@GaborSzarnyas私は "トランザクション/コミット" HTTPエンドポイントとREST APIを使用しています。 (実際には、結果を視覚化するためにneo4j-browserにコマンドを入力するだけです) – user2218067

答えて

1

Cypherにあなたはこのような何かを行うことができますCACHE MATCH...文が実装されていないものの:

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

それとも、ラベルを通してそれを行うことができます:

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

は、キャッシュからデータを取得します。

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 
関連する問題