Я новичок в Neo4j - 2.1.6. В моем графике любой узел может иметь несколько родителей и несколько дочерних элементов, которые также являются родителями и дочерними узлами других узлов. Мне нужно найти тех родителей и детей, которые имеют несколько найденных узлов. Выбранные узлы могут быть от одного до сотен отношений от их общего родителя или дочернего элемента. Все узлы имеют одну и ту же метку.Neo4j Cypher запрос медленно найти общих детей. Каков наилучший подход?
Я использую следующий запрос cypher, но он очень медленный, когда вы добавляете больше, чем пару узлов .... Я хотел бы искать по 20 или более узлов одновременно для их общих соединений. Здесь я ищу детей на 4 узлах:
MATCH (n1)-[*]->(x), (n2)-[*]->(x), (n3)-[*]->(x), (n4)-[*]->(x)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
Есть ли какой-то другой способ, которым я должен подходить к этому? Спасибо!
Это большое спасибо! Сейчас требуется небольшая часть времени. Являются ли длинные пути просто слабостью Cypher или они проблематичны с Neo4j в целом? – Damon
Только слабость планировщика, основанного на правилах, в 2.1. Это изменится в 2.2 (вы также можете попробовать префикс вашего запроса cypher 2.1.experimental и посмотреть, что произойдет) –