簡體   English   中英

密碼:在Neo4j中匹配隨機節點

[英]Cypher: Match random node in Neo4j

我有一個包含340萬個節點的數據庫,並且想要選擇一個隨機節點。

我嘗試使用類似

MATCH (n) 
WHERE rand() <= 0.01
RETURN n 
LIMIT 1

但是似乎算法總是從相同的節點開始,並選擇隨機數低於0.01的第一個節點,這意味着在大多數情況下,“隨機”節點是前100個檢查的節點之一。

是否有更好的查詢來選擇我所有節點中的一個完全隨機的節點?

您可以從rand()函數生成一個隨機ID,然后將其乘以節點數。 通常,這應該返回一個更隨機的節點。

MATCH (n) 
WHERE id(n) = toInteger(rand() * 3400000)

一旦在節點內創建了一些空間(即由於刪除,它們不再是完美連續的),您可能會在這里和那里錯過一些空間。 在這種情況下,您總是可以將隨機數的范圍設置為+/-幾,然后返回結果的第一行。

WITH toInteger(rand() * 3400000) AS rand_node, 5 AS offset
WITH range(rand_node - offset, rand_node + offset) AS rand_range
MATCH (n) 
WHERE id(n) IN rand_range
RETURN n
LIMIT 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM