"Neo4j Tutorial"의 두 판 사이의 차이

hiblue
이동: 둘러보기, 검색
(Cypher 실습)
(Cypher, The Graph Query Language)
30번째 줄: 30번째 줄:
 
==Cypher, The Graph Query Language==
 
==Cypher, The Graph Query Language==
 
[[file:cypher_model.JPG|800px]]
 
[[file:cypher_model.JPG|800px]]
*Cyper의 기본 구조
+
===Cyper의 기본 구조===
 
  MATCH <pattern> WHERE <conditions> RETURN <expressions>
 
  MATCH <pattern> WHERE <conditions> RETURN <expressions>
*Create
+
===Create===
 +
CREATE (변수:라벨 { 속성: "속성값", 속성: "속성값" })
 +
ex) CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
 +
''이름이 Emil이고 출신이 Sweden, 영향력이 99인 Person 라벨의 개체를 만들어라.''
 +
<!--
 
  CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
 
  CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
 
''이름이 Emil이고 출신이 Sweden, 영향력이 99인 Person 라벨의 개체를 만들어라.''
 
''이름이 Emil이고 출신이 Sweden, 영향력이 99인 Person 라벨의 개체를 만들어라.''
46번째 줄: 50번째 줄:
 
  MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer) WHERE js.name = "Johan" AND surfer.hobby = "surfing" RETURN DISTINCT surfer
 
  MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer) WHERE js.name = "Johan" AND surfer.hobby = "surfing" RETURN DISTINCT surfer
 
''라벨이 Person인 개체(js) 중 KNOWS와 KNOWS가 두번 연결된 관계에 있는 것을 surfer라 한다. 이름이 johan인 개체(js) surfer의 취미가 surfing인 것들 중 surfer들의 고유값을 보여줘라.
 
''라벨이 Person인 개체(js) 중 KNOWS와 KNOWS가 두번 연결된 관계에 있는 것을 surfer라 한다. 이름이 johan인 개체(js) surfer의 취미가 surfing인 것들 중 surfer들의 고유값을 보여줘라.
 +
-->
  
 
==Cypher 실습==
 
==Cypher 실습==

2018년 1월 24일 (수) 19:52 판

Neo4j 소개

  • Neo4j is the world's leading graph database.
    그래프 데이터 베이스
  • Cypher, The Graph Query Language를 이용

Neo4j의 기본구조

  • The Labeled Property Graph Model을 기본 데이터 구조로 가짐.

Neo4j model.JPG

노드Nodes

  • 데이터 개체
    Nodes are the main data elements
  • 관계로 다른 노드들과 연결
    Nodes are connected to other nodes via relationships
  • 하나 이상의 속성을 지님
    Nodes can have one or more properties (i.e., attributes stored as key/value pairs)
  • 하나 이상의 라벨을 지님
    Nodes have one or more labels that describes its role in the graph

관계Relationships

  • 두 개의 노드를 연결
    Relationships connect two nodes
  • 직접적으로 연결
    Relationships are directional
  • 하나의 노드가 여러 개의 관계, 재귀적인 관계도 가질 수 있음
    Nodes can have multiple, even recursive relationships
  • 관계는 하나 이상의 속성을 가진다
    Relationships can have one or more properties (i.e., attributes stored as key/value pairs)

속성Properties

  • 문자로 정의된 값
    Properties are named values where the name (or key) is a string
  • 색인화되고, 제한될 수 있다.
    Properties can be indexed and constrained
  • 다양한 속성으로 복합적인 색인을 만들 수 있다
    Composite indexes can be created from multiple properties

라벨Labels

  • 노드를 묶는 단위
    Labels are used to group nodes into sets
  • 하나의 노드는 여러개의 라벨을 가질 수 있다
    A node may have multiple labels
  • 그래프에서 노드를 더 잘 찾을 수 있도록 색인화된다
    Labels are indexed to accelerate finding nodes in the graph
  • 기초 라벨 색인은 속도에 최적화되어 있다
    Native label indexes are optimized for speed

Cypher, The Graph Query Language

Cypher model.JPG

Cyper의 기본 구조

MATCH <pattern> WHERE <conditions> RETURN <expressions>

Create

CREATE (변수:라벨 { 속성: "속성값", 속성: "속성값" })

ex) CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 }) 이름이 Emil이고 출신이 Sweden, 영향력이 99인 Person 라벨의 개체를 만들어라.

Cypher 실습

match (n:Actor) return n
  • 클래스가 Actor인 개체의 한글이름과 한자이름을 보여라.
match (n:Actor) return n.name, n.chname
  • 프로젝트가 워커힐인 개체를 모두 보여라 (아무거나 25개만 보여라)
MATCH (n) where n.project="워커힐" RETURN n (LIMIT 25)
  • 방문했다(visits)라는 관계를 개체를 모두 보여라.
MATCH p=()-[r:visits]->() RETURN p
  • 이벤트의 이름과 이벤트에 참여한 행위자의 수를 내림차순으로 보여라.
match (e:Event)<-[:Creates]-(a:Actor) return e.name as eventName, count(a) as 참여인원 order by 참여인원 desc
  • 이벤트와 그 이벤트가 열린 장소를 모두 보여라.
match (n:Place)<-[:isHeldAt]-(o) return n,o
  • 과거 프로젝트 : 강세윤과 두단계까지만 연결된 인물들을 보여라
match (a1:Actor{name:"강세윤"}) -[*1..2]- (a2:Actor) where a1.project="과거" and a2.project="과거" return a1, a2
  • 포미닛과 외화벌이(개념)을 연결하는 가장 빠른 길은?
match (포미닛{name:"포미닛"}), (외화벌이{name:"외화벌이"}), 빠른길= shortestPath((포미닛)-[*]-(외화벌이)) return 포미닛, 외화벌이, 빠른길
  • 워커힐 프로젝트의 actor를 group 속성으로 분류하고, 각 속성에 속하는 개체의 이름을 보여라.
match (n:Actor) where n.project="워커힐" return n.group, count(n) as 분류, collect(n.name)