要通過一個額外的參數來篩選結果:
MATCH (g:GNE{sym:"ST1"})-[:like]->(c:CLUSTER)<-[:Belong]-(h:GNE)
WITH h, c
MATCH (c:CLUSTER)-[:has]-(v:ORTH{term:"Your Value"})
WITH h, COUNT(c) AS score, COLLECT(c.clusterInfo) AS info
ORDER BY score DESC
WHERE score >= 4
RETURN h.sym, score, info, h.chr
如果你硬是要爲v.term是相同的所有值(但你不知道提前值是什麼),那麼它會更復雜一點,我認爲你將不得不使用WHERE ALL集合謂詞來比較ORTH節點集合中的term屬性。
MATCH (g:GNE{sym:"ST1"})-[:like]->(c:CLUSTER)<-[:Belong]-(h:GNE)
WITH h, c
MATCH (c:CLUSTER)-[:has]-(v:ORTH)
WITH h, COUNT(c) AS score, COLLECT(c.clusterInfo) AS info, COLLECT(v) as orths
ORDER BY score DESC
WHERE ALL(orth IN TAIL(orths) WHERE (orth.term = HEAD(orths).term))
AND score >= 4
RETURN h.sym, score, info, h.chr
如果這是你希望它可以更快地打破了頭和尾收集修飾符到一個單獨的並運用的長度過濾器的第一件事:
MATCH (g:GNE{sym:"ST1"})-[:like]->(c:CLUSTER)<-[:Belong]-(h:GNE)
WITH h, c
MATCH (c:CLUSTER)-[:has]-(v:ORTH)
WITH h, COUNT(c) AS score, COLLECT(c.clusterInfo) AS info, COLLECT(v) as orths
WHERE score >= 4
WITH h, score, info, TAIL(orths) as orhttail, HEAD(orths) as orthhead
WHERE ALL(orth IN orthtail WHERE (orth.term = orthead.term))
RETURN h.sym, score, info, h.chr
這將是巨大的,如果你可以設置(http://gist.neo4j.org)中添加了一些數據,因爲我已經看到您在該域中提出了多個問題。所以其他人更容易跟隨和推理你的模型。無論如何,這將是很酷:) – 2014-10-08 00:28:22
這是作爲一個過濾器嗎?即只有v.term在所有收集的羣集中相等才能返回結果?是v.term需要等於查詢參數的值? – JohnMark13 2014-10-08 08:20:17