2016-10-28 7 views
1

私はNeo4j Transactional Cypher HTTPエンドポイントを使用します。Neo4j REST同じクエリと異なるパラメータを持つ複数のステートメントリクエスト

{ 
    "statements" : [ { 
    "statement" : "MATCH path=shortestPath( 
(p:Person {idp:123})-[*..10]-(p2:Person {idp:{idp2}})) 
RETURN reduce(x={ 
     last_idp: +head(nodes(path)).idp, 
     str:"" +head(nodes(path)).idp }, 
    r IN relationships(path) | 
    { 
     last_idp: CASE WHEN x.last_idp = startnode(r).idp THEN endnode(r).idp ELSE startnode(r).idp END, 
     str: CASE WHEN x.last_idp = startnode(r).idp 
      THEN x.str +"-" +type(r)+"->"+ endnode(r).idp 
      ELSE x.str +"<-"+type(r)+"-" + startnode(r).idp 
      END 
    } 
).str AS rpath", 

    "parameters" : {"idp2": 1234} 
    }, { 
    "statement" : "<the same chypher query as above>", 
    "parameters" : {"idp2": 1234} 
    }, { 
    "statement" : "<the same chypher query as above>", 
    "parameters" : {"idp2": 1235} 
    }, 
    ... 
    { 
    "statement" : "<the same chypher query as above>", 
    "parameters" : {"idp2": 1255} 
    } ] 
} 

どのように私は無意味な繰り返しを避けるために要求を簡素化することができます:私はCYPHERクエリは、すべての文でも同じですが、パラメータが異なる複数の文でリクエストを行う必要があり

http://neo4j.com/docs/developer-manual/3.0/http-api/#rest-api-execute-multiple-statements

サイファークエリ文字列の?

そして、私は同じクエリを計画している&の解析に不必要なコストを避けたいと考えています。 可能ですか?

+0

それはまったく同じクエリの場合は、それが解析されたか、再度計画されることはありません。サイファーエンジンは、これらをキャッシュします。 –

答えて

3

すべてのidp2パラメータ値を1つのコレクションに渡し、UNWIND句をCypherクエリの先頭に追加できます。これにより、各idp2値に対してクエリが実行されます。例えば

{ 
    "statements" : [ { 
    "statement" : 
     "UNWIND {idp2s} AS idp2 
     MATCH path=shortestPath((p:Person {idp:123})-[*..10]-(p2:Person {idp:idp2})) 
     RETURN reduce(
     x={ 
      last_idp: +head(nodes(path)).idp, 
      str:"" +head(nodes(path)).idp }, 
     r IN relationships(path) | 
     { 
      last_idp: CASE WHEN x.last_idp = startnode(r).idp THEN endnode(r).idp ELSE startnode(r).idp END, 
      str: CASE WHEN x.last_idp = startnode(r).idp 
      THEN x.str +"-" +type(r)+"->"+ endnode(r).idp 
      ELSE x.str +"<-"+type(r)+"-" + startnode(r).idp 
      END 
     } 
    ).str AS rpath", 

    "parameters" : {"idp2s": [1234,1235,1236,1255]} 
    }] 
} 
関連する問題