Neo4j: связать разные узлы с одним узлом - PullRequest
0 голосов
/ 11 октября 2018

Допустим, у вас есть следующие 4 узла:

Набор 1: (акт: «Журнал событий», отметка времени: 3461000) (акт: «Отчет о работоспособности», отметка времени: 3461000)

Set 2: (act: «Журнал событий», отметка времени: 149100) (act: «Отчет о времени безотказной работы», отметка времени: 149100)

Я пытаюсь выяснить, как сопоставить каждый набор узлов одному узлу,Я попробовал следующий Cypher, но все 4 узла отображаются только на один узел (а) вместо того, чтобы создавать два (а) узла и отображать 2 набора соответственно.Необходимо ли иметь условие, которое ищет соответствующую временную метку узлов (act)?Тогда, если временная метка совпадает, то свяжите эти узлы с (a)?Любая помощь будет принята с благодарностью.

MATCH (seconds)<-[:AT_TIME]-(act)--(obj) 
WHERE reqObj.filename IN ["6013", "6005"]
MERGE (a:Abs{name: 'SigEvent'})
CREATE (reqAct)-[:LINK]->(a)

1 Ответ

0 голосов
/ 12 октября 2018

Так что, если я правильно понимаю, вам нужен узел: Abs для каждой отдельной отметки времени в узлах действия.Для этого нам нужно агрегировать узлы действия по отметке времени (поэтому вы получите только одну строку на отдельную отметку времени), затем СОЗДАТЬ узел: Abs, а затем выполнить FOREACH, чтобы создать отношения с новым узлом.

MATCH (act)--(obj) 
WHERE obj.filename IN ["6013", "6005"]
WITH act.timestamp as timestamp, collect(DISTINCT act) as acts
CREATE (a:Abs{name: 'SigEvent'}) // created per row, so per distinct timestamp
FOREACH (act in acts | CREATE (act)-[:LINK]->(a))

Я удалил часть шаблона сопоставления в seconds, так как он не выглядел так, как если бы вы его использовали.

Однако в этом запросе есть серьезная проблема.Это сопоставление не может использовать поиск по индексу, так как вы не используете метки в шаблоне сопоставления, поэтому выполняется сканирование всех узлов, что приведет к ужасной производительности по мере роста графика.Вам по крайней мере нужен ярлык на одном из них.Похоже, вы намереваетесь выполнить поиск индекса по obj.filename, поэтому добавьте соответствующую метку к obj в вашем шаблоне MATCH, чтобы можно было использовать ваш индекс (если вы его создали).

...