0
집계하려는 노드가 원래 경로에 있지 않고 대신에 관련된 가변 길이 경로에서 집계 쿼리를 수행하려고합니다. 예를 들어 내 경로Neo4j 가변 길이 경로 및 집계 쿼리
MATCH p = (:Visit)-[:NEXT*]->(:Visit)
RETURN p
처럼 보이지만 각 내가 원하는 집계는 ID 속성을 기반으로 공통의 경로를 계산하는 것입니다
(:Visit)-[:LOCATION]->(:Destination)
: (대상) (방문) 노드는 관련이 방문수가 아니라 대상 노드의 나는 많은 고정 된 길이 경로를 결합하는 조합을 사용하는 방법 결과
MATCH (d1:Destination)--(v1:Visit), (d2:Destination)--(v2:Visit)
WHERE (v1:Visit)-[:NEXT]->(v2:Visit)
RETURN [d1.id,d2.id] AS Path, count(*) AS PathCount
UNION
MATCH (d1:Destination)--(v1:Visit), (d2:Destination)--(v2:Visit), (d3:Destination)--(v3:Visit)
WHERE (v1:Visit)-[:NEXT]->(v2:Visit)-[:NEXT]->(v3:Visit)
RETURN [d1.id,d2.id,d3.id] AS Path, count(*) AS PathCount
UNION ...
을 생각하지만 경로가 길이 (200)의 말 경우이 아주 좋은 해결책이 아니다, 나는의 성능에 대한 걱정 많은 노동 조합을 사용. http://gist.neo4j.org/?a8ab894c5c9740a94747
샘플 데이터
을CREATE
// Destinations.
(d1:Destination {id:'A'}),
(d2:Destination {id:'B'}),
(d3:Destination {id:'C'}),
(d4:Destination {id:'D'}),
(d5:Destination {id:'E'}),
(d6:Destination {id:'F'}),
// First Route
(v1:Visit {time:1}),
(v2:Visit {time:2}),
(v3:Visit {time:3}),
(v4:Visit {time:4}),
(v5:Visit {time:5}),
(v1)-[:LOCATION]->(d1),
(v2)-[:LOCATION]->(d2),
(v3)-[:LOCATION]->(d3),
(v4)-[:LOCATION]->(d4),
(v5)-[:LOCATION]->(d6),
(v1)-[:NEXT]->(v2)-[:NEXT]->(v3)-[:NEXT]->(v4)-[:NEXT]->(v5),
// Second Route
(v6:Visit {time:10}),
(v7:Visit {time:21}),
(v8:Visit {time:23}),
(v10:Visit {time:45}),
(v6)-[:LOCATION]->(d1),
(v7)-[:LOCATION]->(d2),
(v8)-[:LOCATION]->(d4),
(v9)-[:LOCATION]->(d6),
(v10)-[:LOCATION]->(d5),
(v11)-[:LOCATION]->(d3),
(v6)-[:NEXT]->(v7)-[:NEXT]->(v8)-[:NEXT]->(v9)-[:NEXT]->(v10)-[:NEXT]->(v11);
예상 출력
Path PathCount
[A, B] 2
[D, F] 1
[B, D] 1
[B, C] 1
[C, D] 1
[B, C, D] 1
[C, D, F] 1
[A, B, C] 1
[A, B, D] 1
... many more
이 검색어는 도움이되지 않습니다. 첫 번째 목적지와 마지막 목적지 만 각 경로에 포함됩니다. 또한 질문에 명확하지 않았습니다. 동일한 대상을 가진 경로의 수를 단일 경로의 길이가 아닌 원하는 것으로 계산했습니다. – Shawn
내 쿼리가 경로의 모든 대상을 반환한다고 생각합니다. 샘플 데이터로 확인한 결과를 보여주기 위해 내 대답을 편집했습니다. 실제로 각 대상에 대해 얼마나 많은 경로가 포함되어 있는지 알고 싶습니까? 아니면 다른 것을 원하니? – cybersam
귀하의 쿼리는 4 행만 반환하며, 그 중 하나는 길이가 7입니다. 샘플 데이터의 가장 긴 경로는 길이가 6입니다. 대상의 경로 (길이에 관계없이)가 얼마나 많은지 계산하고 싶습니다. 방문했다. 2 개의 샘플 경로 사이의 유일한 공통 경로 인 [A, B]의 PathCount가 2 인 길이 2-6의 결과 집합을 (샘플 데이터에서) 기대합니다. – Shawn