УДАЛИТЬ МИНУЛЬНЫЕ СЧЕТНЫЕ ДАННЫЕ В neo4j - PullRequest
0 голосов
/ 24 мая 2018

Я хочу удалить некоторые данные после подсчета neo4j.Этот метод может быть сделан вручную (подсчет данных, а затем удаление данных), но мне нужно, чтобы кто-то указал мне, возможно ли это сделать автоматически (подсчет данных и удаление данных в одном запросе).Я не смог найти способ вернуть наименьший / минимальный объем данных после того, как я сделал некоторый подсчет с использованием функции min () в neo4j.Я могу, вероятно, сделать обходной путь, используя порядок и ограничить данные, но я должен быть уверен, что нет другого выбора, кроме этого, если я хочу сделать этот метод.

Это ссылка на данные .Данные представляют собой пользовательский журнал событий, который состоит только из case_id и имени активности.

Итак, это то, что я уже пробовал:

//LOAD DATA
LOAD CSV with headers FROM "file:///*.csv"
  AS line
Create (:Activity {CaseId:line.Case_ID,
Name:line.Activity })
LOAD CSV with headers FROM "file:///*.csv"
  AS line
Create (:CaseActivity {CaseId:line.Case_ID,
Name:line.Activity })

//SEQUENCE DISCOVERY
match (c:Activity)
with collect(c) AS Caselist
unwind range(0,Size(Caselist) - 2) as idx
with Caselist[idx] AS s1, Caselist[idx+1] AS s2
match (b:CaseActivity),(a:CaseActivity)
where s1.CaseId = s2.CaseId AND
s1.Name = a.Name AND
s2.Name = b.Name AND
s1.CaseId = a.CaseId AND
s2.CaseId = b.CaseId
merge (a)-[:NEXT {relation:"NEXT"}]->(b)

match(a:Activity) 
with a.CaseId as id, 
collect (a.Name) as Trace_Type 
match(b:CaseActivity) 
where id = b.CaseId 
return count (distinct b.CaseId) as Frequencies, Trace_Type, Collect(distinct b.CaseId) as CaseId 
order by Frequencies desc

1 Ответ

0 голосов
/ 25 мая 2018

В вашем вопросе не указано, что вы хотите удалить.Этот запрос предполагает, что вы хотели, чтобы ваш последний запрос удалил узлы b (и возвратил некоторые данные об удаленных узлах b):

MATCH (a:Activity) 
WITH a.CaseId as id, COLLECT(a.Name) AS Trace_Type 
MATCH (b:CaseActivity) 
WHERE id = b.CaseId 
WITH
  COUNT(distinct b.CaseId) AS Frequencies,
  Trace_Type,
  COLLECT(distinct b.CaseId) AS CaseId,
  COLLECT(DISTINCT b) AS bs
FOREACH(x IN bs | DELETE x)
RETURN Frequencies, Trace_Type, CaseId
ORDER BY Frequencies DESC;

Переменные, содержащие значения, полученные из удаленных узлов b (например, Frequencies и CaseId) по-прежнему будут действительны после удаления узлов.

Хитрость, которую стоит отметить в вашем конкретном примере, заключается в том, что ваше последнее предложение WITH использовало агрегацию , с Trace_Type в качестве ключа группировки.Чтобы мой ответ не изменил ключ группировки (и, следовательно, возможно, изменил ваши возвращаемые результаты), я просто добавил COLLECT(DISTINCT b) AS bs к предложению WITH.Затем, поскольку каждый bs является списком b узлов (для Trace_Type), я использовал FOREACH для удаления узлов в каждом списке.

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