Подтвердить что ты не робот

Neo4j: Есть ли способ/как выбрать случайные узлы?

Я хотел бы получить определенное количество случайных узлов. График состоит из 3 000 000 узлов, некоторые из которых являются источниками, некоторые являются целевыми, а некоторые - оба.

Цель состоит в том, чтобы извлечь случайные источники, и, поскольку я не знаю, как выбрать случайные, программа генерирует k случайных чисел от 1 до 3 000 000, которые представляют идентификаторы узлов, а затем отбрасывает все случайно выбранные узлы, которые не являются источниками. Поскольку эта процедура занимает много времени, мне интересно, можно ли напрямую выбирать случайные источники с помощью запроса шифра.

В случае выбора всех источников запрос будет следующим

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

Кто-нибудь знает, как можно было бы выбрать ограниченное количество случайных узлов непосредственно с шифром или, если это невозможно, предложить какой-нибудь обходной путь?

4b9b3361

Ответ 1

Вы можете ограничить свой запрос с помощью skip/limit, чтобы вы могли делать

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

В противном случае вы также можете создать набор случайных node -id и передать их как параметр в оператор cypher.

Ответ 2

Вы можете использовать такую ​​конструкцию:

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

Он должен вернуть вам случайный набор объектов.

Протестировано с Neo4j 2.1.3

Ответ 3

Другой способ, предложенный здесь, для случая, когда вы хотите, чтобы случайно запущенные узлы со всеми там соединениями:

MATCH (a)-[:LEADS_TO]->[]
WITH a,rand() AS rand
ORDER BY rand LIMIT {YourLimit}
MATCH (a)-[l:LEADS_TO]->(t)
RETURN a,l,t

Ответ 4

MATCH (n:Label)
WITH n, rand() AS r
ORDER BY r
RETURN n LIMIT <no. of random nodes>