Видалити всі вузли та взаємозв'язки в neo4j 1.8


92

Я знаю, що це питання задають багато людей вже
для мого дослідження, ось кілька питань, які задавались раніше

  1. Як видалити всі відносини в графі нео4j?
  2. https://groups.google.com/forum/#!topic/neo4j/lgIaESPgUgE

Але врешті-решт, ми все ще не можемо вирішити наші проблеми,
ми просто хочемо видалити "ВСІ" вузли та "ВСІ" взаємозв'язки

введіть тут опис зображення

припустимо, видалити "ALL" можна побачити, що залишилося 0 вузлів 0 властивостей і 0 зв'язків

Це знімок екрана, який я зробив після виконання видалення "ВСЕ", запропонованого форумом

Моє запитання все те саме, як видалити всі вузли та всі відносини в neo4j

Відповіді:


246

Станом на 2.3.0 і до 3.3.0

MATCH (n)
DETACH DELETE n

Документи

Попередньо 2.3.0

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

Документи


2
у цьому прикладі в документах Neo4j сказано: "Цей запит не призначений для видалення великих обсягів даних, але приємний, коли грається з невеликими прикладами наборів даних.". Цікаво, чи краще зробити MATCH () - [r] - () DELETE r, а потім MATCH (n) DELETE n
George Birbilis

2
@GeorgeBirbilis, для цього над великими обсягами даних операція повинна бути розбита на кілька транзакцій і повинні бути реалізовані механізми повторних спроб.
Bob B

1
не впевнений, чи потрібна повторна спроба, але ітеративний спосіб зробити це, див. відповідь Стефана Армбрустера на stackoverflow.com/questions/29711757/… (я також згадую це в кінці мого посилання на блог, яке я маю в окремій відповіді)
Джордж Бірбіліс

Відповідь-запит 2.3 для мене не працює. Пропозиція @GeorgeBirbilis робить.
aliteralmind

@aliteralmind, судячи з neo4j.com/docs/2.3.0/query-delete.html, ймовірно, проблема полягає в тому, що після) потрібен новий рядок або принаймні пробіл, оскільки в даний час він пише ...) DETACH, який виглядає як друкарська помилка (а також, можливо, тримати DETACH DELETE на одному рядку, але не впевнений, що це потрібно). Зверніть увагу, у статті все-таки сказано: "Цей запит не стосується видалення великих обсягів даних, але приємний, коли грається з невеликими прикладами наборів даних".
Джордж Бірбіліс,

6

ви, мабуть, робите це правильно, лише на інформаційній панелі відображається лише вищий взятий ідентифікатор, а отже, кількість "активних" вузлів, зв'язків, хоча таких немає. це просто інформативно.

щоб переконатися, що у вас порожній графік, запустіть цю команду:

START n=node(*) return count(n);
START r=rel(*) return count(r);

якщо обидва дають вам 0, ваше видалення було успішним.


так, це правда, але на приладовій панелі не відображається ні вищий, ні найвищий ідентифікатор
Huei Tan

так, це те, як вони його запрограмували - оскільки у вас є кластер з мільярдами вузлів, ви не хочете рахувати їх вручну. але десь я бачив, як хтось заглиблюється в це і робить якесь виправлення javascript, можливо, якщо вам пощастить, ви погуглите допис.
ulkas

5

для великої бази даних ви повинні або вилучити базу даних з диска (після того, як ви спочатку зупините движок), або використовувати в Cypher щось на зразок:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount

див. https://zoomicon.wordpress.com/2015/04/18/howto-delete-all-nodes-and-relationships-from-neo4j-graph-database/ для отримання додаткової інформації, яку я зібрав на цю тему з різних відповідей


2

Neo4j не може видалити вузли, які мають відношення. Вам потрібно видалити відносини, перш ніж ви зможете видалити вузли.

Але це простий спосіб видалити "ВСІ" вузли та "ВСІ" взаємозв'язки простим шипером. Це код:

МАТЧ (n) ВИДАЛЕННЯ ВИДАЛИТИ n

-> DETACH DELETE видалить всі вузли та відносини за допомогою Match


0

якщо ім'я вузла є наприклад: abcd, тоді запрацює нижчий запит:

MATCH (n:abcd)
DETACH DELETE n

Це призведе лише до видалення вузла з міткою "abcd" та всіх його зв'язків.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.