neo4j和groovy:可变长度路径的自动加载
我有大量由访问网站的用户组成的数据。每次访问我都有时间戳。使用该脚本,我创建了一个图形,每个页面都有一个单独的路径neo4j和groovy:可变长度路径的自动加载,groovy,neo4j,Groovy,Neo4j,我有大量由访问网站的用户组成的数据。每次访问我都有时间戳。使用该脚本,我创建了一个图形,每个页面都有一个单独的路径 U1-->T1-->P1 | --->T2-->P2 etc. 现在,我希望有以下结构: U1->T1->P1->T2->P2 显然,每个用户访问不同数量的页面。我有这样一个文件: person,time,place U1,t1,P1 U1,t2,P2 U1,t3,P3 U2,t4,P1 U2,t5,P6 每个用户序列都是按访问时间排序的,所以t1a
U1-->T1-->P1
|
--->T2-->P2
etc.
现在,我希望有以下结构:
U1->T1->P1->T2->P2
显然,每个用户访问不同数量的页面。我有这样一个文件:
person,time,place
U1,t1,P1
U1,t2,P2
U1,t3,P3
U2,t4,P1
U2,t5,P6
每个用户序列都是按访问时间排序的,所以t1about me->blog等
我假设您的节点为用户标记为
U
,为时间戳标记为T
,为页面标记为p
U
和aP
之间的关系中。这将大大减少节点和关系的数量
例如,与此相反(我正在建立关系)
类型):
您可以使用此功能,每次访问可节省1个节点和1个关系:
(:U)-[:VISITED {timestamp: 123}]->(:P)
P1
,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在U2
行之后包含另一个U1
行,则需要创建第二个U1
节点。为了防止这种重复,您应该为U
和P
节点使用MERGE
而不是CREATE
MERGE
仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接在一起的关系(将时间戳作为属性)我假设您的节点为用户标记为
U
,为时间戳标记为T
,为页面标记为p
U
和aP
之间的关系中。这将大大减少节点和关系的数量
例如,与此相反(我正在建立关系)
类型):
您可以使用此功能,每次访问可节省1个节点和1个关系:
(:U)-[:VISITED {timestamp: 123}]->(:P)
P1
,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在U2
行之后包含另一个U1
行,则需要创建第二个U1
节点。为了防止这种重复,您应该为U
和P
节点使用MERGE
而不是CREATE
MERGE
仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接在一起的关系(将时间戳作为属性)我假设您的节点为用户标记为
U
,为时间戳标记为T
,为页面标记为p
U
和aP
之间的关系中。这将大大减少节点和关系的数量
例如,与此相反(我正在建立关系)
类型):
您可以使用此功能,每次访问可节省1个节点和1个关系:
(:U)-[:VISITED {timestamp: 123}]->(:P)
P1
,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在U2
行之后包含另一个U1
行,则需要创建第二个U1
节点。为了防止这种重复,您应该为U
和P
节点使用MERGE
而不是CREATE
MERGE
仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接在一起的关系(将时间戳作为属性)我假设您的节点为用户标记为
U
,为时间戳标记为T
,为页面标记为p
U
和aP
之间的关系中。这将大大减少节点和关系的数量
例如,与此相反(我正在建立关系)
类型):
您可以使用此功能,每次访问可节省1个节点和1个关系:
(:U)-[:VISITED {timestamp: 123}]->(:P)
P1
,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在U2
行之后包含另一个U1
行,则需要创建第二个U1
节点。为了防止这种重复,您应该为U
和P
节点使用MERGE
而不是CREATE
MERGE
仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接到一起的关系(将时间戳作为属性)