20

我想检索特定数量的随机节点。该图由 3 000 000 个节点组成,其中一些是源,一些是目标,一些是两者。

目的是检索随机源,由于我不知道如何选择随机源,因此程序会生成从 1 到 3 000 000 的 k 个随机数,它们代表节点 ID,然后丢弃所有随机选择的非源节点。由于这个过程很耗时,我想知道是否可以使用密码查询直接选择随机源。

如果选择所有来源,查询将如下

START t=node(*) MATCH (a)-[:LEADS_TO]->(t) RETURN a

有谁知道如何直接使用密码选择有限数量的随机节点,或者如果不可能,建议任何解决方法?

4

4 回答 4

20

您可以使用这样的结构:

MATCH (a)-[:LEADS_TO]->(t) 
RETURN a, rand() as r
ORDER BY r

它应该返回你随机的对象集。

使用 Neo4j 2.1.3 测试

于 2014-12-24T13:16:08.637 回答
11

您可以使用跳过/限制来限制您的查询,这样您就可以做到

START t=node(*) 
MATCH (a)-[:LEADS_TO]->(t) 
RETURN a
SKIP {randomoffset} LIMIT {randomcount} 

否则,您还可以创建一组随机节点 ID,并将它们作为参数传递给 cypher 语句。

于 2012-09-20T17:41:59.757 回答
-1

这里建议的另一种方式,如果您想要一个具有所有连接的随机 Start 节点是:

MATCH (a)-[:LEADS_TO]->[]
WITH a,rand() AS rand
ORDER BY rand LIMIT {YourLimit}
MATCH (a)-[l:LEADS_TO]->(t)
RETURN a,l,t
于 2015-10-26T14:43:44.707 回答
-1
MATCH (n:Label)
WITH n, rand() AS r
ORDER BY r
RETURN n LIMIT <no. of random nodes>
于 2018-06-21T09:18:52.463 回答