STUDY/LLM

[LLM] Neo4jGraph와 Cypher 쿼리 - 2

seoyn 2026. 7. 9. 23:03

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