Связать "эквивалентные" узлы с помощью Neo4j

Freddy MINI спросил: 12 мая 2018 в 04:06 в: neo4j

Я признаюсь, что был новичком в Cypher. Я пытаюсь графовать газеты СМИ во Франции и США (СМИ как узлы) с их политикой (другой узел). Связь [: POLITICAL_ORIENTATION_IS] существует, и все в порядке. MATCH p = (m: Media) - [r: POLITICAL_ORIENTATION_IS] - > (o: PoliticalOrientation) Теперь, поскольку эти Политические имена имеют разные названия, но некоторые из них ЭКВИВАЛЕНТ между Францией и США, как "Левые" во Франции и "Демократы США" в США, я хотел бы создать это отношение [: ЭКВИВАЛЕНТ] и показать отношения на графике. Я застрял здесь, что не показывает эти [: EQUIVALENT]:

// custom relations in politics
CREATE (t:PoliticalOrientation { name:'Democrat US' })-[z:EQUIVALENT]->(u:PoliticalOrientation { name: 'Left' })
with t,z,u
MATCH (m:Media)-[:IS_LISTED_IN_CUSTOM_LISTS]->(p:CustomLists)
Match (m)-[:POLITICAL_ORIENTATION_IS]->(r:PoliticalOrientation)
MATCH zz=()-[rr:EQUIVALENT]->()
WHERE p.name CONTAINS "NEWS" AND NOT r.name = "None"
RETURN m,p,r,zz,rr

Любая помощь очень ценится. Спасибо заранее

1 ответ

cybersam ответил: 12 мая 2018 в 04:55

Этот запрос должен возвращать эквивалентные узлы PoliticalOrientation и их узлы Media:

MATCH (r:PoliticalOrientation)<-[:POLITICAL_ORIENTATION_IS]-(m:Media)-[:IS_LISTED_IN_CUSTOM_LISTS]->(p:CustomLists)
WHERE p.name CONTAINS "NEWS" AND r.name <> 'None'
WITH COLLECT(r) AS rs, COLLECT(m) AS ms
UNWIND RANGE(0, SIZE(rs)-1) AS i
WITH ms, rs, rs[i] AS r1, ms[i] AS m1
MATCH (r1)-[:EQUIVALENT]-(r2)
WHERE r2 IN rs
RETURN r1, m1, r2, [j IN RANGE(0, SIZE(rs)-1) WHERE rs[j] = r2 | ms[j]][0] AS m2
Freddy MINI ответил: 12 мая 2018 в 05:01
Спасибо Cybersam. к сожалению, он возвращается (без изменений, без записей). Сожалею.
cybersam ответил: 12 мая 2018 в 05:14
Можете ли вы предоставить некоторые данные образца (через некоторые предложения CREATE)?
Freddy MINI ответил: 12 мая 2018 в 05:52
CREATE p = (Media {name: 'NewspaperFR1'}) - [: POLITICAL_ORIENTATION_IS] - > (политическое определение {name: 'Left'}) CREATE p = (Media {name: 'NewspaperFR2'}) - [: POLITICAL_ORIENTATION_IS] - > (PolicyOrientation {name: 'Left'}) CREATE p = (Media {name: 'NewspaperFR3'}) - [: POLITICAL_ORIENTATION_IS] - > (политическое присвоение {name: 'Right'}) CREATE p = (Media {name : 'NewspaperUS1'}) - [: POLITICAL_ORIENTATION_IS] - > (политическое определение {name: 'Center'}) CREATE p = (Media {name: 'NewspaperUS2'}) - [: POLITICAL_ORIENTATION_IS] - > (политическое определение {name: "Демократы США"))
Freddy MINI ответил: 12 мая 2018 в 05:54
Я знаю, как графа Media и PolitOrientation. Что не может быть сделано на этом графике (media - > PolitOrientation) Как также просмотреть это CREATE (t: PoliticalOrientation {name: 'Democrat US'}) - [z: EQUIVALENT] - > (u: PoliticalOrientation {name : 'Оставил' })
Freddy MINI ответил: 12 мая 2018 в 05:54
Огромное спасибо за вашу помощь