Вы можете использовать запрос как этот:
create (center:Center),
(:Node{rank : rand()})-[:LINKED_TO]->(center),
(:Node{rank : rand()})-[:LINKED_TO]->(center),
(:Node{rank : rand()})-[:LINKED_TO]->(center),
(:Node{rank : rand()})-[:LINKED_TO]->(center),
(:Node{rank : rand()})-[:LINKED_TO]->(center),
(:Node{rank : rand()})-[:LINKED_TO]->(center),
(:Node{rank : rand()})-[:LINKED_TO]->(center)
для создания этого графика:
Обратите внимание на использование функции rand () для назначения случайного значения свойству rank
в каждом узле.
И чтобы получить верхние узлы на основе свойства rank
, которое вы можете использовать (в данном случае 5 лучших):
match (:Center)<-[:LINKED_TO]-(n:Node)
with n order by n.rank desc limit 5
return n
EDIT
Здесь более элегантное (но сложное) решение для создания "графа-солнца" с использованием процедуры APOC apoc.periodic.iterate
. Я использую параметр, чтобы определить количество соседей. docs о apoc.periodic.iterate говорит:
С apoc.periodic.iterate вы предоставляете 2 утверждения, первое внешнее
оператор предоставляет поток значений для обработки. Второй,
внутреннее утверждение обрабатывает один элемент за один раз или с
iterateList: true для всего пакета за раз.
Итак, в первом утверждении я возвращаю number_of_n
элементов (используя range () ). Затем второй оператор выполняется number_of_n
раз, создавая каждого соседа.
CALL apoc.periodic.iterate(
"with range(0, {number_of_n} - 1) as items
unwind items as item
return item",
"merge (center:Center)
create (:Node{rank : rand()})-[:LINKED_TO]->(center)",
{params : {number_of_n:20}})
Этот запрос выводит график вроде: