В моем графике сообщений есть следующие отношения:
(m:Message)-[:ORIGINATED_AT]->(i:IP)-[:IN_NETWORK]-(n:Network)
Я пытаюсь найти IP-адреса и сети, отправляющие наибольшее количество сообщений с категорией = «спам».
Я пробовал следующий запрос:
// IPs sending the most spam:
match (ip:IpAddress)--(m:Message)
where toLower(m.category) contains 'spam'
with ip, size(()-[:ORIGINATED_AT]->(ip)) as volume
ORDER BY volume DESC LIMIT 10
match (ip)--(net:Network)
return ip, net
, но кажется, что он обнаруживает "сети, которые отправили наибольшее количество сообщений с хотя бы одним спам-сообщением", но мне нужны "сети, которые имеютотправил больше всего спама ". Кроме того, запрос возвращает меньше 10 ожидаемых результатов.
Я удалил переменную сообщения, чтобы получить IP-адреса, отправляющие наибольшее количество сообщений, и это, похоже, работает как ожидалось:
// IPs sending the most messages:
match (ip:IpAddress)
with ip, size(()-[:ORIGINATED_AT]->(ip)) as volume
ORDER BY volume DESC LIMIT 10
match (ip)--(net:Network)
return ip, net
Как я могу изменить свой запрос, чтобы правильно подсчитывать только те отношения, в которых связанный (m: Message) имеет категорию: «спам»?