| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- TensorFlow
- matplotlib
- sort
- query
- 차트
- plugin
- ELASTIC
- 파이썬
- Kafka
- springboot
- aggregation
- Test
- Elasticsearch
- flask
- Python
- aggs
- zip 파일 암호화
- high level client
- 900gle
- analyzer test
- license delete
- API
- token filter test
- licence delete curl
- docker
- Mac
- Java
- License
- MySQL
- zip 암호화
Archives
- Today
- Total
개발잡부
neo4j 테스트 본문
반응형
그래프 기본 구조
- Node (정점) → 객체, 엔티티
예: (:User), (:Keyword), (:Item) - Relationship (간선) → 관계, 방향 있음
예: (:Keyword)-[:NEXT]->(:Keyword) - Property (속성)
예: (:Keyword { name:'치킨', count:10 })
테스트
CREATE
(k1:Keyword {name: "치킨"})-
[:NEXT]->(k2:Keyword {name: "닭고기"})-
[:NEXT]->(k3:Keyword {name: "조리식품"})-
[:NEXT]->(k4:Keyword {name: "튀김"})-
[:NEXT]->(k5:Keyword {name: "냉동식품"});
데이터 조회
MATCH (n) RETURN n LIMIT 10;

특정노드 조회
MATCH (k:Keyword {name:'치킨'})
RETURN k;

노드생성
CREATE (:Keyword {name:'치킨', count:1});
관계생성
MATCH (a:Keyword {name:'치킨'}), (b:Keyword {name:'닭고기'})
MERGE (a)-[r:NEXT]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;
자 이제 부터 진짜 테스트
하나씩 처리 하는 방법
// 하나씩 처리 하는 방법
- 투자전략
CREATE
(k1:Keyword {name: "스마트폰"})-
[:NEXT]->(k2:Keyword {name: "전기차"})-
[:NEXT]->(k3:Keyword {name: "AI"})-
[:NEXT]->(k4:Keyword {name: "양자"})-
[:NEXT]->(k5:Keyword {name: "로봇"})-
[:NEXT]->(k6:Keyword {name: "우주"});
- 관계생성
MERGE (:Keyword {name: '애플'}); // 노드만 먼저 만들고
MATCH (a:Keyword {name:'스마트폰'}), (b:Keyword {name:'애플'})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;
MERGE (:Keyword {name: '테슬라'});
MATCH (a:Keyword {name:'전기차'}), (b:Keyword {name:'테슬라'})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;
MERGE (:Keyword {name: '엔비디아'});
MATCH (a:Keyword {name:'AI'}), (b:Keyword {name:'엔비디아'})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;

create 를 두번 하면
그러니까 merge 로 노드를 만들었는데 next 를 맺어주기 위해 create 를 했더니
같은 이름의 노드가 2개가 생기면서 이런.. 기형적인.. 모습이...

이런 경우엔 create 하지말고 match + merge 로 기존 노드들 사이에 next 추가
시나리오
투자흐름은 스마트폰 - 전기차 - AI - 양자 - 로봇 - 우주 의 흐름으로 검색 유입되었고
스마트폰 - 애플 관계에서 애플이 전기차 사업에 뛰어들어서 전기차 - 애플 의 관계가 추가되었다.
테슬라는 전기차에서 AI, 우주, 로봇 사업을 하고 있어 관계가 있고
엔비디아는 AI 에서 양자부문까지 진출 관계를 형성하였다.

테스트
- 삭제
MATCH (n) DETACH DELETE n;
- 데이터 조회
MATCH (n) RETURN n LIMIT 100;
//여러개 한번에 처리
// 1) 우선 필요한 노드들 전부 만들고
UNWIND ['스마트폰'
, '전기차'
, 'AI'
, '애플'
, '엔비디아'
, '테슬라'
, '양자'
, '아이온큐'
, '로봇'
, '리치테크로보틱스'
, '우주'
, '로캣랩'
, '리게티'
] AS name
MERGE (:Keyword {name:name});
//2) 관계를 맺음
UNWIND [
['스마트폰', '애플'],
['전기차', '테슬라'],
['양자', '아이온큐'],
['로봇', '리치테크로보틱스'],
['우주', '로캣랩'],
['양자', '리게티'],
['AI', '엔비디아'],
['양자', '엔비디아'],
['AI', '테슬라'],
['로봇', '테슬라'],
['테슬라', '로봇'],
['전기차', '애플']
] AS pair
MATCH (a:Keyword {name: pair[0]}),
(b:Keyword {name: pair[1]})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN a.name, b.name, r.count;
3) NEXT
UNWIND ["스마트폰", "전기차", "AI", "양자", "로봇", "우주"] AS name
WITH collect(name) AS names // ["스마트폰","전기차",...,"우주"]
UNWIND range(0, size(names)-2) AS i
WITH names[i] AS fromName,
names[i+1] AS toName
MATCH (from:Keyword {name: fromName}),
(to:Keyword {name: toName})
MERGE (from)-[:NEXT]->(to);
// 하나씩 처리 하는 방법
- 투자전략
CREATE
(k1:Keyword {name: "스마트폰"})-
[:NEXT]->(k2:Keyword {name: "전기차"})-
[:NEXT]->(k3:Keyword {name: "AI"})-
[:NEXT]->(k4:Keyword {name: "양자"})-
[:NEXT]->(k5:Keyword {name: "로봇"})-
[:NEXT]->(k6:Keyword {name: "우주"});
- 관계생성
MERGE (:Keyword {name: '애플'}); // 노드만 먼저 만들고
MATCH (a:Keyword {name:'스마트폰'}), (b:Keyword {name:'애플'})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;
MERGE (:Keyword {name: '테슬라'});
MATCH (a:Keyword {name:'전기차'}), (b:Keyword {name:'테슬라'})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;
MERGE (:Keyword {name: '엔비디아'});
MATCH (a:Keyword {name:'AI'}), (b:Keyword {name:'엔비디아'})
MERGE (a)-[r:RELATED]->(b)
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
RETURN r;
조회
MATCH (a:Keyword {name:"스마트폰"})-[r:NEXT*1..5]->(b)
RETURN a, r, b;
특정노드 기준으로
MATCH (a:Keyword {name:'양자'})-[r]->(b)
RETURN a, r, b;
반응형
Comments