- Cypher & GQL
이 글은 게스트 블로그 포스팅이에요. 아밋 굽타님이 Neo4j 토론 포럼에서 나눈 이야기를 바탕으로 작성되었답니다.
친구의 친구를 소개해 줄 사람 찾기
제가 풀었던 재미있는 문제가 하나 있었는데요, 바로 Facebook 같은 그래프 네트워크에서 2촌 친구(친구의 친구)를 소개해 줄 수 있는 1촌 친구(친구) 목록을 찾는 거였어요.
예를 들어, 'X'와 'Y'라는 친구가 있고, 'Z'가 그들의 공통 친구라고 가정해 볼게요. 저는 모든 2촌 친구(예: Z)를 `Query`하고, 모든 1촌 친구 목록을 반환받고 싶은 거죠. 이 경우 출력은 ["X", "Y"]여야 해요. 이 목록이 바로 제 친구의 친구에게 저를 소개해 줄 수 있는 사람들이 되는 거죠. 이걸 수행하는 Cypher `Query`를 보여드리기 위해, 예제 그래프 설정이 포함된 아래 Neo4j 데모 콘솔을 한번 살펴볼까요?
START joe=NODE:node_auto_index(name = “조”) MATCH joe–[:KNOWS]->friend–[:KNOWS]->friend_of_friend WHERE NOT(joe–[:KNOWS]–friend_of_friend) RETURN collect(friend.name), friend_of_friend.name
이 쿼리는 다음을 반환해요.
collect(friend.name), friend_of_friend.name
[빌, 사라] 이안
[빌] 데릭
[사라] 질
일괄 가져오기 중에 자동 인덱싱을 지원하기 위한 Index 생성
node_auto_index라는 Index에 추가된다는 것을 알고 있죠? 이제 멋진 부분이 있어요. (일괄 가져오기 시) 원본 수동 Index를 추가하고 이름을 node_auto_index로 지정하면 Neo4j에서 자동 인덱싱을 활성화하면 일괄 삽입된 Node가 자동 인덱싱된 것처럼 나타나요. 그리고 이후부터 Node를 생성할 때마다 해당 Node도 인덱싱될 거예요.Node를 생성하고 Cypher를 통해 Index에 Node를 추가합니다.
제 문제는 간단했어요. Node를 Graph Database로 일괄 가져오고 Index를 생성했는데, 이제 그래프에 새로 추가된 Node에 대해 Index에 추가하고 싶었던 거죠. 이 모든 작업은 Cypher를 통해 수행되어야 했어요. 아쉽게도 현재 Cypher에서는 지원되지 않아요. 해결 방법을 생각했는데 아래에서 설명할게요.
예를 들어 그래프에 가져온 Node가 여러 개 있고 Index가 node_auto_index라고 가정해 볼게요. 또한 neo4j.properties에서 name을 인덱싱 가능한 Property로 선언했어요. 이제 다음을 수행할 수 있어요.
CREATE n = {name: 'xyz', …} RETURN n;
그러면 'xyz'라는 이름의 Node가 생성돼요. 이 Node가 실제로 인덱싱되었는지 확인하려면 다음 Query를 실행하면 돼요.
START root= node:node_auto_index('name:xyz') RETURN root;
Viola, 방금 생성한 Node도 자동으로 인덱싱되었음을 알 수 있어요!
에이치시스템즈의 LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.
'Neo4j' 카테고리의 다른 글
| 세계 최대 Graph Database 구축 비하인드 스토리 (1) | 2026.09.27 |
|---|---|
| 9월 9일, AWS에서 Neo4j AuraDB Enterprise 마스터 되기 (0) | 2026.09.27 |
| Batching Like a Pro (0) | 2026.09.26 |
| ANZ 은행은 어떻게 데이터 기반 인사이트로 DevOps와 클라우드 마이그레이션을 최적화했을까? (0) | 2026.09.26 |
| BambooHR에서 Neo4j로 데이터 연결하기 (0) | 2026.09.26 |
