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等

  • 上述结构U1->T1->P1->T2->P2是一种好方法吗?(我有大约3000万份参赛作品)
  • 我需要修改groovy脚本,以便它能够以相同的顺序自动添加关系和节点。我想把以前的用户id保存在内存中,如果新用户id=旧id,那么我只添加关系和位置。否则,我将创建一个新用户并构建新路径

  • 我假设您的节点为用户标记为
    U
    ,为时间戳标记为
    T
    ,为页面标记为
    p

  • 您不需要时间戳节点。相反,您可以将时间戳值放在a
    U
    和a
    P
    之间的关系中。这将大大减少节点和关系的数量

    例如,与此相反(我正在建立关系) 类型):

    您可以使用此功能,每次访问可节省1个节点和1个关系:

    (:U)-[:VISITED {timestamp: 123}]->(:P)
    
  • 您所描述的内容似乎合理,但您可以为同一页面创建多个节点(例如,在示例文件中,
    P1
    ,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在
    U2
    行之后包含另一个
    U1
    行,则需要创建第二个
    U1
    节点。为了防止这种重复,您应该为
    U
    P
    节点使用
    MERGE
    而不是
    CREATE
    MERGE
    仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接在一起的关系(将时间戳作为属性)


  • 我假设您的节点为用户标记为
    U
    ,为时间戳标记为
    T
    ,为页面标记为
    p

  • 您不需要时间戳节点。相反,您可以将时间戳值放在a
    U
    和a
    P
    之间的关系中。这将大大减少节点和关系的数量

    例如,与此相反(我正在建立关系) 类型):

    您可以使用此功能,每次访问可节省1个节点和1个关系:

    (:U)-[:VISITED {timestamp: 123}]->(:P)
    
  • 您所描述的内容似乎合理,但您可以为同一页面创建多个节点(例如,在示例文件中,
    P1
    ,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在
    U2
    行之后包含另一个
    U1
    行,则需要创建第二个
    U1
    节点。为了防止这种重复,您应该为
    U
    P
    节点使用
    MERGE
    而不是
    CREATE
    MERGE
    仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接在一起的关系(将时间戳作为属性)


  • 我假设您的节点为用户标记为
    U
    ,为时间戳标记为
    T
    ,为页面标记为
    p

  • 您不需要时间戳节点。相反,您可以将时间戳值放在a
    U
    和a
    P
    之间的关系中。这将大大减少节点和关系的数量

    例如,与此相反(我正在建立关系) 类型):

    您可以使用此功能,每次访问可节省1个节点和1个关系:

    (:U)-[:VISITED {timestamp: 123}]->(:P)
    
  • 您所描述的内容似乎合理,但您可以为同一页面创建多个节点(例如,在示例文件中,
    P1
    ,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在
    U2
    行之后包含另一个
    U1
    行,则需要创建第二个
    U1
    节点。为了防止这种重复,您应该为
    U
    P
    节点使用
    MERGE
    而不是
    CREATE
    MERGE
    仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接在一起的关系(将时间戳作为属性)


  • 我假设您的节点为用户标记为
    U
    ,为时间戳标记为
    T
    ,为页面标记为
    p

  • 您不需要时间戳节点。相反,您可以将时间戳值放在a
    U
    和a
    P
    之间的关系中。这将大大减少节点和关系的数量

    例如,与此相反(我正在建立关系) 类型):

    您可以使用此功能,每次访问可节省1个节点和1个关系:

    (:U)-[:VISITED {timestamp: 123}]->(:P)
    
  • 您所描述的内容似乎合理,但您可以为同一页面创建多个节点(例如,在示例文件中,
    P1
    ,因为它出现了两次),而您确实希望每页有一个节点。此外,如果该文件在
    U2
    行之后包含另一个
    U1
    行,则需要创建第二个
    U1
    节点。为了防止这种重复,您应该为
    U
    P
    节点使用
    MERGE
    而不是
    CREATE
    MERGE
    仅当节点不存在时才会创建节点,否则只返回现有节点。一旦有了节点,就可以继续创建将它们链接到一起的关系(将时间戳作为属性)