-
Neo4j RestAPI 서버 구성하기 #2Intelligent Product/Neo4J 2022. 5. 10. 23:22
Neo4j RestAPI 서버 구성하기 #1
다음 가이드를 참고하여 Neo4J의 데이터를 읽고 쓸 수 있는 Rest API 서버를 구성하였다. https://spring.io/guides/gs/accessing-data-neo4j/ Accessing Data with Neo4j this guide is designed to get you pro..
jasper.tistory.com
이전 포스트에서는 Neo4jRepository를 구성하여 만드는 방법을 구현 했었다. 하지만 이경우에는 Cypher Query의 return 을 한가지만 해야한다는 제약사항이 존재한다.
아래와 같이 쿼리를 구성하면 한가지 값만 리턴하라는 메세지와 함께 Exception이 발생한다.
@Query("MATCH (m:Person)<-[:IS_FRIEND_OF]->(n:Person) WHERE m.name=$name RETURN m, n") Map<Long,Object> selectFriendByName(String name);
그렇다면 아래와 같이 여러가지 Type의 데이터를 반환하는 쿼리경우에는 어떻게 구성해야할까?
MATCH (m:Person)<-[r:IS_FRIEND_OF]->(n:Person) WHERE m.name=$name RETURN m, n, r
쿼리의 결과 Neo4j Driver에서 Session을 불러와서 직접 처리하는 방법이 있다.
private final Driver driver; public List<Record> selectFriends(String name) { List<Record> records; try (Session session = driver.session()) { StringBuilder cyperQuery = new StringBuilder(); cyperQuery.append("MATCH (m:Person)-[r:IS_FRIEND_OF]-(n:Person) WHERE "); cyperQuery.append("m.name = \"").append(name).append("\""); cyperQuery.append("RETURN m, n, r"); records = session.run(cyperQuery.toString()).list(); } return records; }
이 경우 반환값을 Record 타입의 리스트로 받는다.
records list 를 디버거로 확인하면 다음과 같은 데이터를 담고 있는것을 확인 할 수 있다.
쿼리의 리턴값인 m, n, r이 들어 있는 것을 알 수 있으며, node인지 relationship인지 타입이 구분되어 있는 것을 알 수 있다.
각 m,n,r 은 Pair라는 타입으로 데이터를 받을 수 있다.
for(Record record : records) { List<Pair<String, Value>> fieldList = record.fields(); for(Pair<String, Value> pair: fieldList) { ...
record.fields() value 의 instance의 type으로 Node와 Relationship을 구분할 수 있다.
if(pair.value() instanceof NodeValue) { // Node! } else { Iterator<Value> iter = pair.value().values().iterator(); while(iter.hasNext()) { Value value = iter.next(); if(value instanceof RelationshipValue) { // Relationship! } } }
다음 목표 : 레스토랑 추천 서비스를 api 로 추가하기, react 를 이용하여 그래프 화면 구성해보기
'Intelligent Product > Neo4J' 카테고리의 다른 글
Neo4j Rest API 서버 구성하기 #3 (0) 2022.05.11 Neo4j RestAPI 서버 구성하기 #1 (0) 2022.05.09 neo4j example - 레스토랑 (0) 2022.03.03 Neo4J 데이터 셋 구성 (0) 2022.03.03 Neo4J 세팅 (0) 2022.03.03