2017-12-04 10 views
1

사실은 TEI로 인코딩 된 XML 텍스트를 그래프 (노드 체인)로 모델링 했으므로 그래프에서 가장 짧은 경로와 가장 짧은 경로 만 찾고 싶습니다. . enter image description here 내 쿼리는cypher에서 경로를 찾는 방법 ungreedy 방법

MATCH (w0:XmlWord)-[:NEXT*..6]->(n:XmlTag {_name:'lb'})-[:NEXT*..6]->(w1:XmlWord) 
RETURN id(w0), id(w1); 

처럼 보인다 그리고 난 단지 최단 경로를 필요로하지만, neo4j는 6 단계까지 나에게 모든 가능성을 제공합니다. 결과는 Vorträge, 동네 짱, Freiherrn 노드 해야 Neo4j는 6 단계까지 다시 모든 가능한 조합을 나에게 준다

.

누군가 샘플 데이터베이스에 액세스해야하는 경우 알려주세요.

+2

아주 좋은 질문입니다. 흥미로운 답변을 드리겠습니다. 그러나 예제의 반환 값을 명확히하십시오. 두 가지 결과가 있어야합니다 : (w1 : Vortrage, w2 : uber); (w1 : des, w2 : Freiherrn)? –

+0

오타가있는 것 같습니다. 쿼리는'w0'과'w1'의 ID를 반환해야합니다. 맞습니까? 또한 현재 반환 된 모든 결과를 표시 할 수 있습니까? – cybersam

+0

당신 말이 맞아요. 나는 그 (것)들을 가진 몇몇 추가 일을하기 위하여 ID 2 워드 노드를 찾고있다. 그러나 그 길을 아는 것이 interessting 것입니다. –

답변

0

동일한 경로에서 여러 개의 가변 길이 관계를 사용하는 경우 약간 힘듭니다. 그러나 경로 길이별로 결과를 정렬하고 길이가 최소 인 필터를 필터링 할 수 있습니다.

MATCH path = (:XmlWord)-[:NEXT*..6]->(:XmlTag {_name:'lb'})-[:NEXT*..6]->(:XmlWord) 
WITH length(path) as length, collect(path) as paths 
ORDER BY length ASC 
LIMIT 1 
UNWIND paths as path 
WITH head(nodes(path)) as first, last(nodes(path)) as last 
RETURN id(first), id(last); 
+0

나를 위해 작동 ;-) 이제 더 긴 경로로 테스트하고 있습니다. –