2015-03-30 1 views
1

Я разработал следующий запрос, чтобы найти все узлы, удовлетворяющие определенным критериям запроса. В частности, все коды болезней, которые удовлетворяют определенным параметрам. Я использовал 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

ответ

1

Этот запрос работает для вас?

MATCH p = (a:ObjectConcept{sctid:233604007})<-[:ISA*]-(b:ObjectConcept)<-[:HAS_DX]-(z:Patient), 
     q = (c:ObjectConcept)<-[:ISA*]-(d:ObjectConcept) 
WHERE (c.sctid = 58800005 OR c.sctid = 65119002) AND NOT (b)-->()-->(c) AND NOT (b)-->()-->(d) 
RETURN DISTINCT z; 
+0

Логика запроса будет работать, но я вижу две проблемы. Во-первых, поиск путей q, как написано, пересекает всю модель без ограничений на c и, следовательно, выполняет ненужные вычисления. Во-вторых, поиск путей p, в то время как интригующий дизайн, должен каким-то образом «воцариться», чтобы ограничить вычисления узлов/ребер, не связанных с поиском. Мне придется играть с этими понятиями, поскольку я вижу их достоинства. Благодарю. –

0

Следующий запрос был успешным. Он требовал согласования всех аспектов желаемого вывода в каждом подзапросе, чтобы заголовки столбцов были одинаковыми. Менее 1 секунды добавляется к времени запроса.

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) 
with distinct b 
MATCH (t:Patient)-[:HAS_DX]-> (b) 
RETURN distinct t.patient_id,b.FSN 
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) 
with distinct b 
MATCH (t:Patient)-[:HAS_DX]-> (b) 
RETURN distinct t.patient_id,b.FSN; 
Смежные вопросы