2012-06-04 2 views
1

두 번째 쿼리에서 첫 번째 쿼리의 결과를 사용하고 싶습니다. Cypher에서이 작업을 수행하는 방법을 잘 모르겠습니다.Neo4j Cypher에서 여러 쿼리를 어떻게 제공합니까?

현재 코드,

START user1=node:USER_INDEX(USER_INDEX = "userA") 
MATCH user1-[r1:ACCESSED]->docid1<-[r2:ACCESSED]-user2, user2-[r3:ACCESSED]->docid2 
WHERE r2.Topic=r3.Topic 
RETURN distinct docid2.Label; 

I 노드의 동일한 docid2 세트의 WHERE 절에서 확인 다른 조건을 가지고 결과를 축적하고 날짜 필드를 기준으로 순서를 수행 할. 동일한 트랜잭션 내에서 일치 항목을 여러 번 제공 할 수 없습니다. 두 개의 다른 cypher 스크립트를 사용하여 세 번째 쿼리에서 결합하려고 할 때입니다. 이것이 사이퍼에서 가능합니까? 또는 사용자 지정 함수를 작성하고 호출 할 수있는 옵션이 있습니까? 저장된 Gremlin 스크립트와 같은 Cypher 스크립트를 저장 했습니까?

+1

... 중 일괄 요청이나 자바 API이다 하나의 쿼리 부분을 다른 쿼리 부분으로 옮길 수 있습니다. 예를 들어 where 절이 두 개인 HAVING을 수행 할 수 있습니다. 참조 : http://docs.neo4j.org/chunked/snapshot/query-with.html –

답변

1

Michael이 의견에서 언급했듯이 "with"문을 사용하여 결과를 추가 진술로 스트리밍 할 수 있습니다. 불행히도 "where"절 다음에 다른 명령문을 시작할 수 없습니다. 여러 반환 진술 종류의 비논리적이 될 것입니다,하지만 당신은 단일 쿼리의 예에서 여러 가지 작업을 수행 할 수 있습니다

START x=node:node_auto_index(key="x") 
with count(x) as exists 
start y=node:node_auto_index(key="y") 
where exists = 0 
create (n {key:"y"})<-[:rel]-y 
return n, y 

이가 "X"노드가 존재하는지 확인 것이라고하고, 그것을 만들 진행되지 않은 경우, 두 개의 매개 변수를 추가하십시오.

당신이 결과 집합에 더 정교한 일을하고자하는 경우, 가장 좋은 옵션은 파이프 쿼리 결과 (도 집계)에서 당신을 수 있습니다 WITH로 볼 수

관련 문제