neo4j:有没有办法/如何选择随机节点?

Nik*_*lin 13 neo4j cypher

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

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

如果要选择所有源,则查询将如下所示

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

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

谢谢!

Luk*_*ach 14

你可以使用这样的结构:

MATCH (a)-[:LEADS_TO]->(t) 
RETURN a, rand() as r
ORDER BY r
Run Code Online (Sandbox Code Playgroud)

它应该返回随机的对象集.

用Neo4j 2.1.3测试

  • 杰出的!这更紧凑: MATCH (a)... RETURN a ORDER BY rand() (5认同)
  • 不错,虽然300,000个节点可能会很慢,因为我认为neo4j会将所有节点加载到内存中进行排序 (3认同)

Mic*_*ger 9

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

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

否则,您还可以创建一组随机node-id并将它们作为参数传递给cypher语句.

  • 在这种情况下,偏移是随机的,但该集合在某种程度上是连续的吗?即如果randomcount为100,则根据节点ID返回100条记录,还是每次调用都是随机排序? (2认同)