1. 환경 설정 및 DB 연결
from langchain_neo4j import Neo4jGraph
graph = Neo4jGraph()
graph.query("RETURN 'hello'")
• .env에서 NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, NEO4J_DATABASE 로드
• reset_database() 헬퍼 함수로 DB 초기화(모든 노드/관계/제약조건/인덱스 삭제)
더보기
2. 데이터 모델 : 소셜 네트워크
| 노드 레이블 | Property | 설명 |
| Person | name, age, gender | 사용자 |
| Interest | name | 관심사(영화, 음악, 스포츠, 여행 등) |
| Location | name | 장소 |
| City | name, population | 도시 |
| 관계 유형 | 방향 | Property | 설명 |
| KNOWS | Person → Person | since | 친구 관계 |
| LIKES | Person → Interest | rating | 관심 정도 |
| VISITED | Person → Location | data, rating | 방문 이력 |
| LIVES_IN | Person → City | since | 거주지 |
| LOCATED_IN | Location → City | 장소의 소속 도시 |
• 중복 방지용 제약조건
CREATE CONSTRAINT constraint_person_name_age IF NOT EXISTS
FOR (p: Person) REQUIRE (p.name, p.age) IS UNIQUE
( - 동일하게 Interest.name, City.name, Location.name에도 UNIQUE 제약을 추가)
(- 생략 : CREATE 문으로 8명의 Person, 5개 Interest, 6개 City, 4개 Location 노드와 각 관계 생성)
3. 경로(Path) 쿼리
• 핵심 문법
// 변수 길이 패턴 : 1~3 hop
MATCH (a) -[:REL*1..3]-> (b)
// 정확히 N hop
MATCH (a) -[:REL*2]-> (b)
// 제한 없음(주의)
MATCH (a) -[:REL*]-> (b)
// 경로 변수와 함께
MATCH path = (a) -[:REL*1..3]-> (b) // hop 수 반환
RETURN path, length(path), nodes(path), relationships(path) // 경로에 포함된 노드/관계 리스트 반환
// 최단 경로
MATCH path = shortestPath((a) -[:REL*..10]-> (b))
RETURN path
// 모든 최단 경로(동일 길이)
MATCH path = allShortestPaths((a) -[:REL*..10]-> (b))
RETURN path
4. 집계 함수(Aggregation Functions)
: 여러 행을 하나의 값으로 요약. RETURN or WITH 절에서 사용
| count(x) | x 개수(null 제외) | count(*) | 행 개수 |
| sum(x) | 합계 | avg(x) | 평균 |
| min(x) / max(x) | 최솟값 / 최댓값 | collect(x) | 리스트로 모으기 |
암묵적 GROUP BY : Cypher에는 GROUP BY가 없고, 집계 함수와 함께 등장한 다른 컬럼이 자도응로 그룹화 키가 됨
ex. RETURN d.name, count(m) → d.name 기준 그룹핑 후 카운트
4. WITH절
: 쿼리를 단계적으로 나눠 앞 단계의 결과를 뒤 단계의 입력으로 전달하는 파이프 역할
• 주요 용도
① 집계 결과를 이후 절에서 필터링/매칭에 재사용(WHERE 절에서는 직접 집계 불가)
② 중간 결과 줄이거나 정렬 후 다음 단계로 진행(LIMIT을 조기 적용해 처리량 절감)
③ 변수 범위(scope) 제어 - WITH에 명시하지 않은 변수는 다음 단계에서 사라짐
MATCH 패턴1
WITH 변수, 표현식 AS 별칭 [WHERE 조건]
MATCH 패턴2
RETURN ...
'STUDY > LLM' 카테고리의 다른 글
| [LLM] Graph Schema 설계, 벡터 검색&Text-to-Cypher 조회 (0) | 2026.07.12 |
|---|---|
| [LLM] Neo4jGraph와 Cypher 쿼리 (0) | 2026.07.07 |
| [LLM] RAG - evaluation (0) | 2026.07.06 |
| [LLM] Advanced RAG (0) | 2026.07.05 |
| [LLM] RAG - Retriever (0) | 2026.07.04 |