通过cypher在我的用户旅程图(Neo4j)中查找重定向

时间:2016-10-31 13:11:35

标签: neo4j cypher

我正在通过客户端跟踪生成网络应用程序的用户旅程图。随着跟踪的进行,我生成了具有它们之间关系的节点(网站URL)。这些关系可以是“VIA_CLICK”或“OTHER”。每次用户点击链接时,我都会生成一个新的网站节点,连接到当前节点“VIA_CLICK”。有时链接不会将用户定向到目标URL,而是发生重定向,并且用户从链接加载的HTML不完全是目标URL。在这种情况下,此模式将保存在Neo4j DB中:(开始 - 网站) - [VIA_CLICK] - >(链接目标) - [OTHER] - >(重定向目标)。 我想找到所有这些重定向,因为在这种情况下,我只想保留模式:(开始网站) - [VIA_CLICK] - >(重定向目标)。所有重定向的共同点是,链接目标节点的所有后续节点都是相同的URL,它们之间的关系是“OTHER”。我很难找到正确的密码查询。也许有人可以帮助我。

2 个答案:

答案 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)

Example graph

查询的第一部分导航重定向,而第二部分则查找直接关系。

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