[英]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.