我開發了以下查詢來查找符合特定查詢條件的所有節點。具體來說,所有符合某些參數的疾病代碼。我已使用UNION在代碼中完成此操作:Neo4j - 從兩個獨立集合中查找節點之間關係的密碼語法
//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語法將一組不同的節點b帶到這個後續的查詢語句中。我正在使用Neo4j v 2.1.7。
謝謝
該查詢的邏輯將工作,但我看到兩個問題。首先,對所寫的路徑q的搜索遍歷整個模型,而不受c的限制,因此執行不必要的計算。其次,路徑搜索p是一個有趣的設計,需要以某種方式「統治」來限制與搜索無關的節點/邊的計算。我將不得不玩弄這些概念,因爲我確實看到了他們的優點。謝謝。 – 2015-03-31 13:50:16