想象一个巨大的用户图,每个用户都有一个名为电子邮件的属性。现在想象一下,我必须将那些使用 gmail 的人归为一个名为“google_mail”的组,而将那些使用“yahoo”的人归为一个名为“yahoo_mail”的组。
我如何遍历断开连接的图(没有根节点去访问每个用户节点,而不是每个用户都连接(即我们可能有完全脱节的用户图)。我想避免将所有这些用户加载到内存中。这是可能的?
想象一个巨大的用户图,每个用户都有一个名为电子邮件的属性。现在想象一下,我必须将那些使用 gmail 的人归为一个名为“google_mail”的组,而将那些使用“yahoo”的人归为一个名为“yahoo_mail”的组。
我如何遍历断开连接的图(没有根节点去访问每个用户节点,而不是每个用户都连接(即我们可能有完全脱节的用户图)。我想避免将所有这些用户加载到内存中。这是可能的?
在 Neo4j 2.0 中有一个名为标签的新功能,它似乎非常适合您的用例,请参阅http://docs.neo4j.org/chunked/milestone/graphdb-neo4j-labels.html。
要为所有具有包含“gmail”的电子邮件的节点分配一个GoogleMail
标签,您可以使用:
START n=node(*)
WHERE n.email =~ '.*@gmail.com'
SET n :GoogleMail
START n=node(*)
WHERE n.email =~ '.*@yahoo.com'
SET n :Yahoo
请注意,根据您的图形大小,您可能会使用LIMIT
并SKIP
应用更改而不是在单个大事务中。
获取所有 gmail 用户的列表:
MATCH (n:GoogleMail) RETURN n