Neo4jRyeohang
KJS
2019년 02월 Neo4j 버전을 기준으로 작성되었습니다 - 2019년 2월 1일 작성
목차
Neo4j란 무엇인가
- 노드(Nodes)
- 노드는 관계를 통해 다른 노드에 연결되며, 하나 이상의 속성을 가질 수 있습니다.
- 노드에는 그래프에서 그 역할을 설명하는 하나 이상의 레이블 이 있습니다.
- 관계(Relations)
- 두 노드를 연결하는 관계로, 관계에는 방향성이 있습니다.
- 하나의 노드는 여러 개의 관계 뿐 아니라 재귀 관계도 가질 수 있습니다.
- 관계 또한 노드와 마찬가지로 하나 이상의 속성을 가질 수 있습니다.
- 속성(Properties)
- 속성은 이름이 문자열인 값으로, 여러가지 속성값을 만들 수 있습니다.
- 레이블(Lables)
- 레이블은 노드를 집합으로 그룹화하는 데 사용되며, 한 개의 노드에는 여러 개의 레이블이 있을 수 있습니다.
- 그래프에서 노드를 쉽고 빠르게 찾기 위해 레이블이 색인됩니다.
Neo4j 설치 및 실행하기
해당 화면에서 My Project(빨간색 네모상자)를 선택합니다.
Neo4j에 데이터 입력하기
개체 데이터 입력하기
CREATE (a:Label{Datatypeproperty1:'name', Datatypeproperty2:'name'})
RETURN a
CREATE (변수:라벨{속성:'속성값', 속성:'속성값'})
예시 : 이름 속성값은 '김지선'이고, 소속 속성값은 '한국학중앙연구원', 성별 속성값은 '여자', 라벨이 Person인 노드 A를 만들어라
CREATE (A:Person{이름:'김지선', 소속:'한국학중앙연구원', 성별:'여자'}) RETURN A
CREATE (a1:Person{gid:'P001', project:'여항전기연구', class:'Person', name:'조희룡(趙熙龍)', k_name:'조희룡', c_name:'趙熙龍', midname:'치운(致雲), 이견(而見), 운경(雲卿)', courtesyname:'우봉(又峰), 석감(石憨), 철적(鐵笛), 호산(壺山), 단로(丹老), 매수(梅叟), 창주(滄洲), 석감(石憨), 매화두타(梅花頭陀), 향설관(香雪館), 적루거사(篴樓居士), 사연당(賜硯堂)', alias:'조희룡(趙羲龍)', b_year:'1789', d_year:'1866', sex:'남', clan:'평양조', origin:'평양(平壤)', hierarchy:'비양반', biography:'null', exam:'null', p_mode:'P1', url:'http://dh.aks.ac.kr/~jisun/wiki/index.php/조희룡(趙熙龍)'}) RETURN a1
CREATE (a2:Writing{gid:'W114', project:'여항전기연구', class:'Writing', name:'왕한상전(王漢相傳)', k_name:'왕한상전', c_name:'王漢相傳', t_name:'왕한상전', alias:'null', writer:'조희룡(趙熙龍)', edition:'호산외사(壺山外史)_수경실본', w_type:'산문', w_subtype:'전(傳)', w_mode:'W1', url:'http://dh.aks.ac.kr/~jisun/wiki/index.php/왕한상전(王漢相傳)'}) RETURN a2
관계 데이터 입력하기
MATCH (a{Datatypeproperty:'name'}) Match (b{Datatypeproperty:'name'})
CREATE (a) - [r:Edge{Objectproperty1:'name', Objectproperty2:'name'}] -> (b)
RETURN a, r, b
MATCH (변수:라벨{속성:'속성값', 속성:'속성값'}) Match (변수:라벨{속성:'속성값', 속성:'속성값'})
CREATE (a) - [:관계{속성:속성값}]- (b)
MATCH (a{name:'조희룡(趙熙龍)'}) MATCH (b{name:'왕한상전(王漢相傳)'}) CREATE (a) <- [r:author] - (b) RETURN a, r, b
Neo4j에서 원하는 데이터 검색하기
기본적인 질의어 예시
match (a) return a
match (a:Person) return a
match (a{k_name:'조희룡'}) - [r] - (b{class:'Writing'}) - [s] - (c{k_name:'왕태'}) return a, r, b, s, c
match (a{k_name:'박윤묵'}) - [r] - (b{class:'Writing'}) - [s:writer] - (c{class:'Person'}) return a, r, b, s, c
match (a{k_name:'이단전'}) <- [r:object] - (b{w_mode:'W1'}) return a, r, b
match (a{k_name:'박태성'}) <- [r:object] - (b{w_mode:'W1'}) - [s:references] -> (c{class:'Writing'}) - [t:writer] - (d{class:'Person'}) return a, r, b, s, c, t, d
실제 연구에서 활용한 질의어 예시
세 저자(조희룡, 유재건, 이경민)를 출력하기
- 세 저자는 '인물(Person)' 클래스 개체 속성 'p_mode(작가/입전인물 여부)'값이 P1입니다.
match (a{p_mode:'P1'}) return a
조희룡과 유재건
조희룡과 유재건이 '문헌'을 매개로 연결되는 경우 찾기
match (a{k_name:'조희룡'}) - [r] - (b{class:'Writing'}) - [s] - (c{k_name:'유재건'}) return a, r, b, s, c
조희룡과 유재건이 소속된 '단체'(가문 또는 시사)를 매개로 함께 활동했던 인물 찾기
match (a{k_name:'조희룡'}) <- [r:member] - (b{class:'Group'}) - [s:member] -> (c) <- [t:member] - (d{class:'Group'}) - [u:member] -> (e{k_name:'유재건'}) return a, r, b, s, c, t, d, u, e
조희룡과 유재소가 '서화'를 매개로 연결되는 경우 찾기
match (a{k_name:'조희룡'}) - [r] - (b{class:'Object'}) - [s] - (c{k_name:'유재소'}) return a, r, b, s, c
조희룡과 이경민
조희룡과 이경민이 소속된 '단체'(가문 또는 시사)를 매개로 함께 활동했던 인물 찾기
match (a{k_name:'조희룡'}) <- [r:member] - (b{class:'Group'}) - [s:member] -> (c) <- [t:member] - (d{class:'Group'}) - [u:member] -> (e{k_name:'이경민'}) return a, r, b, s, c, t, d, u, e
조희룡과 '작품(Writing)'을 매개로 연결되는 이경민의 가문(강양 이씨) 일원 찾기
match (a{k_name:'조희룡'}) - [r] - (b{class:'Writing'}) - [s] - (c{class:'Person'}) <- [t:member] - (d{k_name:'강양_이씨'}) return a, r, b, s, c, t, d
유재건과 이경민
유재건과 '작품(Writing)'을 매개로 연결되는 이경민의 가문(강양 이씨) 일원 찾기
match (a{k_name:'유재건'}) <- [r] - (b{class:'Writing'}) - [s] -> (c{class:'Person'}) <- [d] -(e{k_name:'강양_이씨'}) return return a, r, b, s, c, d, e