Neo4j: как удовлетворить первого увиденного отправителя + первое увиденное вложение нескольким получателям - PullRequest
1 голос
/ 20 января 2020

Я работаю с данными входящей электронной почты. Цель этого специального c шифровального запроса - возвращать при наличии first seen sender and first seen attachment sent to multiple recipients.

. attachment выглядит следующим образом:

<id>:16107  containsMultipleExtensions:nofileExtension:jpg  firstseen:"2020-01-14T06:12:09Z" lastseen:"2020-01-14T06:12:09Z" name:090aa40109043fc6383ba8498e22b5338af8c8ddec0ea2  timesseen:12

sender выглядит например:

<id>:13329  domain:example.com  firstseen:"2020-01-14T06:12:09Z" lastseen:"2020-01-14T06:12:09Z"  name:sales@example.com  timesseen:48

Чтобы получить первого увиденного отправителя и получателя, я бы выбрал только когда s.firstseen = s.lastseen AND a.firstseen = a.lastseen. Этот путь я выбрал бы только тогда, когда это было в первый раз.

Но у меня проблемы с частью пути. Я ищу, когда 1 отправитель (в первый раз) отправляет 1 или более вложений (в первый раз) более чем одному получателю.

Это то, что у меня есть.

MATCH path = (s:Sender)-->(a:Attachment)-->(:Recipient)
WHERE s.firstseen = s.lastseen AND a.firstseen = a.lastseen
WITH s, COUNT(DISTINCT a) AS cnt, COLLECT(path) AS paths
WHERE cnt >= 2
RETURN paths

Какие возвращает: enter image description here

Это, кажется, делает то, что я хочу, за исключением того, что он включает в себя отдельных получателей (как пример слева. Как я могу это исправить, чтобы он отображался только когда отправитель отправляет электронные письма только как результаты справа?

1 Ответ

2 голосов
/ 20 января 2020

Это потому, что ваше состояние на cnt, которое считает количество вложений. В левом подграфе на рисунке выше вы можете видеть, как один отправитель отправляет несколько вложений одному получателю. Поэтому, если вы «ищете, когда 1 отправитель (в первый раз) отправляет 1 или более вложений (в первый раз) более чем одному получателю», перенесите условие на счет Recipient:

MATCH path = (s:Sender)-->(a:Attachment)-->(r:Recipient)
WHERE s.firstseen = s.lastseen AND a.firstseen = a.lastseen
WITH s, COUNT(distinct r) as cnt, COLLECT(path) AS paths
WHERE cnt >= 2
RETURN paths
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...