2017-02-03 1 views
0

"알고있는"관계가있는 그래프에서 어떤 사람이 어떤 사람을 알고 있다면 간단한 질문을 풀려고합니다. B. 이상적으로이 질문에 답할 것입니다. 또는 거짓이지만 나는 이것을 풀지 못하고있다. 나는에 넣고 싶습니다neo4j/spring 데이터에 관계가 있는지 테스트합니다.

MATCH (p:Person {userId: {0}}), (b:Person {userId: {1}}) 
MERGE (p)-[r:KNOWS]->(b) 
ON CREATE SET r.alreadyExisted=false 
ON MATCH SET r.alreadyExisted=true 
RETURN r.alreadyExisted; 

결국 :

내가 난 그냥 내 질문에 대답은 그렇다 것을 제외하고, 원하는 거의 무엇 인 또 다른 StackOverflow question에 다음을 발견, 그것은 또한 그래프를 변경 사이퍼없이 그것을 할 수있는 방법이 있는지 뜻이

public interface PersonRepository extends GraphRepository<Person> { 
    boolean knows(final Long me, final Long other); 
} 

같은 봄 Neo4J 저장소 - 스프링스 쿼리 및 찾기 방법을 사용하여, 그건 너무 잘 될 것입니다.

답변

4

이 키퍼 쿼리는 간단한 것이므로 여기에 EXISTS() 함수가 있습니다. EXISTS() 함수는 함수에 주어진 패턴이 그래프에 존재하면 부울 값을 반환합니다.

다음은 Cypher 쿼리입니다. 나는 EXISTS() 함수를 시도했지만 관계 우주선이 존재한다는 것을 명시하는 방법을 알아낼 수 없었다 - 너무 많은

RETURN EXISTS((:Person {userId: {0}})-[:KNOWS]-(:Person {userId: {1}})) 
+0

감사 :

MATCH (p:Person {userId: {0}}), (b:Person {userId: {1}}) RETURN EXISTS((p)-[:KNOWS]-(b)) 

당신은 좀 더 간결하게 만들 수 있습니다! 하나의 작은 변화가 필요했지만 내 "지식"관계는 방향성이있어 A는 B를 알지 못하고 A를 알 수 있습니다. 나는 그것을 (p) - [: KNOWS] -> (b)로 변경하고 효과가있었습니다! – schneida

관련 문제