我正在通过客户端跟踪生成网络应用程序的用户旅程图。随着跟踪的进行,我生成了具有它们之间关系的节点(网站URL)。这些关系可以是“VIA_CLICK”或“OTHER”。每次用户点击链接时,我都会生成一个新的网站节点,连接到当前节点“VIA_CLICK”。有时链接不会将用户定向到目标URL,而是发生重定向,并且用户从链接加载的HTML不完全是目标URL。在这种情况下,此模式将保存在Neo4j DB中:(开始 - 网站) - [VIA_CLICK] - >(链接目标) - [OTHER] - >(重定向目标)。 我想找到所有这些重定向,因为在这种情况下,我只想保留模式:(开始网站) - [VIA_CLICK] - >(重定向目标)。所有重定向的共同点是,链接目标节点的所有后续节点都是相同的URL,它们之间的关系是“OTHER”。我很难找到正确的密码查询。也许有人可以帮助我。
答案 0 :(得分:0)
让我们创建一个示例数据集:
CREATE
(p1:Site {name:1}),
(p2:Site {name:2}),
(p3:Site {name:3}),
(p4:Site {name:4}),
(p5:Site {name:5}),
(p6:Site {name:6}),
(p7:Site {name:7}),
(p8:Site {name:8}),
(p1)-[:VIA_CLICK]->(p2),
(p1)-[:VIA_CLICK]->(p3),
(p2)-[:OTHER]->(p5),
(p3)-[:OTHER]->(p5),
(p4)-[:OTHER]->(p5),
(p5)-[:VIA_CLICK]->(p6),
(p7)-[:VIA_CLICK]->(p8)
查询的第一部分导航重定向,而第二部分则查找直接关系。
MATCH (source:Site)-[:VIA_CLICK]->()-[:OTHER*]->(target:Site)
OPTIONAL MATCH (target)-[:OTHER]->(next)
WITH source, target, COUNT(next) as countNext
WHERE countNext = 0
RETURN DISTINCT source, target
UNION
MATCH (source:Site)-[:VIA_CLICK]->(target:Site)
OPTIONAL MATCH (target)-[:OTHER]->(next)
WITH source, target, COUNT(next) as countNext
WHERE countNext = 0
RETURN DISTINCT source, target
结果如下:
╒═════════╤═════════╕
│source │target │
╞═════════╪═════════╡
│{name: 1}│{name: 5}│
├─────────┼─────────┤
│{name: 5}│{name: 6}│
├─────────┼─────────┤
│{name: 7}│{name: 8}│
└─────────┴─────────┘
我很确定查询可以简化。
此外,我不确定这是否完全回答了问题 - 您是否也想修改图表,即根据查询结果插入新边缘?
答案 1 :(得分:0)
你需要测试other
关系linkTarget的数量是不是很好,然后是1:
MATCH (startWebsite)-[:VIA_CLICK]->(linkTarget)
OPTIONAL MATCH (linkTarget)-[:OTHER]->(redirectTarget)
WITH startWebsite,
linkTarget,
collect(distinct redirectTarget) + linkTarget as testTarget
WHERE size(testTarget) < 3
RETURN startWebsite as source,
head(testTarget) as target