簡體   English   中英

使用 Cypher 在 Neo4j 中找到具有模式的最大路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM