請在WHERE
條款中使用OR
而不是AND
。
編輯:
我覺得有兩個地方的兩個吧。
首先,對於你的「原因交集」,你應該陳述一個表達該交集的模式。可以把它想象成你想要的數據,然後根據圖中的內容打開或概括你想要填充的模式的那些部分。如果我理解你的模型和你的意圖,這將使得像
(fever)-[:CAUSES]->(malaria)<-:[CAUSES]-(flu)
模式爲節點的標識只是佔位符,但讓他們代表你已經知道,感冒和發熱都有這種類型的關係瘧疾。那麼,如果你想問,「與流感和發燒有這種關係的所有事情是什麼?」你可以概括它作爲
(fever)-[:CAUSES]->(unknown)<-[:CAUSES]-(flu)
在自己這些模式都是暗號是相同的,但因爲你將提供兩種已知節點,流感節點,發燒節點,你知道你要他們在根據共同擁有的東西到一定的關係,那麼你可以精確地聲明該模式,並且只留下常見的未知節點。
其次,你需要填充這個模式和你已經知道的節點。如果要按照原樣匹配模式,其中唯一已知的部分就是關係的類型和方向,那麼您會發現所有三元組的節點都以這種方式相關。所以如果你想讓這種模式只與流感和發燒相匹配,你需要在這些模式中提供或填充這些節點。通常情況下,你會做這個索引查找(直到2.0反正realeased),像
START flu=node:Symptom(name="Flu"), fever=node:Symptom(name="Fever")
,然後用在MATCH
條款的模式進行。這樣模式就完全被填充了,除了一個你正在尋找的未知節點。 (請注意,您可以使用一包節點以及單個節點來填充佔位符,但模式的那部分仍然屬於模式中提供的內容。)如果您沒有索引,則可以填寫「所有節點」的流感和發燒佔位符,然後提供進一步的過濾標準。這很糟糕,但它有效。
START flu=node(*), fever=node(*)
MATCH (flu)-[:CAUSES]->(unknown)<-[:CAUSES]-(fever)
WHERE flu.Name="Flu" AND fever.Name="Fever"
RETURN DISTINCT unknown
新版本?你有任何索引可以查找嗎? –
不,會不會有索引,因爲當我通過發燒尋找原因時,它會給我適當的結果。 – pawan9977
你應該在Name上有一個索引,所以它不需要掃描圖表來找到它們。你使用neo 1.9還是2.0?你沒有得到任何結果的原因是因爲在相同的中間結果中,對於aa.Name永遠不會有兩個不同的值,所以你必須使用OR並對它們進行計數,或者如果你只想找到這些結果,他們需要分開匹配。 –