[英]Find largest path featuring pattern in Neo4j with Cypher
我有以下節點類型,以及要查找的模式:
問題結果
答案(帶有“標題”字段)
我想“找到所有通過“否”答案相互關聯的問題,並且所有問題的答案都是“是”,結果相同”-我懷疑我的數據庫中有數百個這樣的組,有些只是其中的兩個節點大小,有些多達 5 或 6 個節點。 不超過六。
所以我可以匹配兩個組中由 nos 連接的所有答案:
(結果)<-[是]-(問題)->[否]->(問題)->[是]->(結果)
但我不知道如何將其應用於 3 或 4 組。 我想我也許可以做一個直:
(question)<-[no][0..*]-(question) - 並找到所有由 nos 連接的問題,然后在 WHERE 子句中添加類似 WHERE所有匹配的問題指向 -> 結果 - 但我沒有想法如何用密碼表達它
任何人都可以幫忙嗎?
[重新編輯]
這可能對你有用。
MATCH p=(oc:Outcome)<-[:Answer {title: 'yes'}]-(q1:Question)-[:Answer* {title: 'no'}]->(q2:Question)-[:Answer {title: 'yes'}]->(oc)
WHERE
NOT (
(oc)<-[:Answer {title: 'yes'}]-(:Question)-[:Answer {title: 'no'}]->(q1) OR
(q2)-[:Answer {title: 'no'}]->(:Question)-[:Answer {title: 'yes'}]->(oc)
) AND
ALL(q IN NODES(p)[1..-1] WHERE (q)-[:Answer {title: 'yes'}]->(oc))
RETURN oc, NODES(p)[1..-1] AS questions;
WHERE
子句中的NOT (...)
術語是為了確保我們只使用最長的Questions
有效序列。
每個結果行都包含一個共享結果和一個有序的 Question 節點集合。
此查詢可能需要很長時間才能完成,因為它沒有指定可變長度模式的上限。 如果這是一個問題,您可能需要指定適當的上限(例如, Answer*..5
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.