우리는 Spring Data Neo4J를 사용하는 프로젝트를 가지고 있습니다. 중요한 기관 중 하나는 다음과 같습니다Neo4J 데이터베이스에서 리프 노드 찾기
@NodeEntity
public class Category {
@GraphId
Long id;
String name;
@RelatedTo(direction = Direction.INCOMING, type = "CHILD")
Category parent;
@RelatedTo(direction = Direction.OUTGOING, type = "CHILD")
Set<Category> children;
}
우리는 이름이 알려진 특정 범주에서 시작 (모든 자녀가없는 즉, 범주) 모든 잎 범주를 찾을 수있는 요구 사항을 가지고있다. 예를 들어, 주어진 계층 구조는 다음과 같습니다 :
Electronics
Camera
Point and Shoot
SLR
Computing
Desktop
Laptop
Tablet
Netbook
Furniture
Tables
Office tables
Home tables
Chairs
Lounge chairs
Office chairs
"사무실 용 테이블"을 반환해야 "가구"에 대한 검색, "홈 테이블", "라운지 의자"와 "사무실 의자". 마찬가지로 "Computing"에 대한 검색은 "Desktop", "Laptop", "Tablet"및 "Netbook"을 반환해야합니다.
스프링 데이터 저장소 메소드에 배치하여 지정된 노드에서 모든 리프 노드를 제공 할 수있는 사이퍼 쿼리를 만드는 데 도움이 필요합니다.
편집 (관련 봄 데이터 저장소 방법) 다음 쿼리는 웨스 도움 후 일 :
@Query(
"START category=node:__types__(className='org.example.domain.Category') " +
"MATCH category-[:CHILD*0..]->child " +
"WHERE category.name={0} AND NOT(child-[:CHILD]->()) " +
"RETURN child")
List<Category> findLeaves(String name);
이 단지 작품을 모든 리프 노드을 찾기 위해 찾고 있다면 여기서 2 노드 서브 그래프의 두 노드는 모두 리프 노드로 간주됩니다). 그렇지 않으면 쿼리가 2 노드 하위 그래프의 상위 노드 (하위 노드는 물론)에서도 일치하므로이 작업이 수행되지 않습니다. 정의에 의해 리프 노드는 하위 노드가 없지만 적어도 하나의 상위 노드가있는 노드이며이 쿼리가 검사하지 않습니다. 또한이 쿼리는 들어오는 관계가 여러 개 있지만 나가는 관계가없는 비 트리 그래프의 리프 노드를 식별하지 못합니다. – InverseFalcon
무향 그래프의 경우 예 – Scott