Я на 99% в полном объеме с моим запросом, но просто должен его оптимизировать сейчас. В запросе ниже число Media
имеет отношение WITH
для тега target
иtag
- это расчет дважды. Однажды в первом матче, когда я делаю count(r)
и, во-вторых, WHERE media-[:WITH]->(target) WITH COUNT(*)
. Я хотел бы оптимизировать запрос, чтобы передать счеты с первого совпадения и сопоставить его с каждым тегом, чтобы мне не приходилось вычислять это значение дважды. Как я могу передать 2 коллекции и раскрутить их? Или, если есть какой-либо другой способ сэкономить на этом дублирующем расчете, я бы с удовольствием это услышал.Как я могу разматывать несколько соединений?
Пример консоли: http://console.neo4j.org/?id=26vqyk
MATCH (target:Tag {name:'tagName'})<-[:WITH]-(:Media)-[r:WITH]->(tag:Tag)
WITH count(r) as counts, tag, target
ORDER BY counts DESC LIMIT 100
WITH collect(tag) as tags, target
UNWIND tags as tag
MATCH (m:Media)-[r:WITH]->(tag)
WITH count(r) as totes, collect(m) as medias, target, tag.name as tag
UNWIND medias as media
MATCH media
WHERE media-[:WITH]->(target)
WITH COUNT(*) as both, totes, tag
RETURN tag, both, totes, both/(totes*1.0)*100
ORDER BY both DESC LIMIT 100
разматываю потому что я должен выполнить запрос по каждому из тегов, и единственный способ сделать это, чтобы сначала собрать, а затем расслабиться. Что возвращает mediaCounts в ваш запрос? count (r1) & count (r2) - одинаковое число. – Zaheer