Я разработал следующий запрос, чтобы найти все узлы, удовлетворяющие определенным критериям запроса. В частности, все коды болезней, которые удовлетворяют определенным параметрам. Я использовал UNION для достижения этой цели в коде:Neo4j - синтаксис cypher для нахождения связей между узлами из двух отдельных коллекций
//Find all diagnosis codes
MATCH p = (a:ObjectConcept{sctid:233604007}) <-[:ISA*]- (b:ObjectConcept),
q = (c:ObjectConcept{sctid:58800005})<-[:ISA*]-(d:ObjectConcept)
WHERE NOT (b)-->()--(c) AND NOT (b)-->()-->(d)
RETURN distinct b
UNION
MATCH p = (a:ObjectConcept{sctid:233604007}) <-[:ISA*]- (b:ObjectConcept),
t = (e:ObjectConcept{sctid:65119002})<-[:ISA*]-(f:ObjectConcept)
WHERE NOT (b)-->()-->(e) AND NOT (b)-->()-->(f)
RETURN distinct b
Я хотел бы заботиться результат от этого запроса. Это набор (отдельный b) и найти всех пациентов с любым из этих заболеваний.
Pseudo-code: Match s = (nodes in distinct b) <-[:HAS_DX]- (z:Patient)
RETURN distinct z
Однако, я не знаю Cypher синтаксиса для выполнения множества различных узлов Ь в этом последующее заявление запроса. Я использую Neo4j v 2.1.7.
Thanks
Логика запроса будет работать, но я вижу две проблемы. Во-первых, поиск путей q, как написано, пересекает всю модель без ограничений на c и, следовательно, выполняет ненужные вычисления. Во-вторых, поиск путей p, в то время как интригующий дизайн, должен каким-то образом «воцариться», чтобы ограничить вычисления узлов/ребер, не связанных с поиском. Мне придется играть с этими понятиями, поскольку я вижу их достоинства. Благодарю. –