2014-02-28 96 views
0

我正在做PoC以查明圖形數據庫是否適合我們的需求。Neo4j密碼器獲取與使用所有關係的另一個節點相關的節點

我們有一項調查回答者回答了問題。我們希望用一組(大部分是兩個或三個)問題中的每個可能的答案組合來分組這些答覆者。

我有以下的節點和關係

(:Question)-[:HasAnswer]->(:Answer) 
(:Respondent)-[:Answered]->(:Answer) 
(:Answer)-[:BelongsTo]->(:WeightingGroup) 

其中:

  • 問題:問題
  • 答案:A可以回答一個問題
  • 受訪者:一個人說回答問題
  • 已回答:回答者問題
  • 權重組:一組答案,形成給定答案的唯一組合
  • 屬於:答案和權重組之間的關係,以形成答案組。

我的目標是收到這樣的結果:

/----------------------------------------------\ 
| Q1     | Q2     | n | 
|--------------------+-------------------------| 
| Answer1   | Answer1   | 23 | 
| Answer1   | Answer2   | 12 | 
| Answer1   | Answer3   | 54 | 
| Answer2   | Answer1   | 65 | 
| Answer2   | Answer1   | 5 | 
| Answer2   | Answer1   | 15 | 
\--------------------+--------------------+----/ 

或:

/-------------------------\ 
| Q1, Q2    | n | 
|--------------------+----| 
| Answer1, Answer2 | 23 | 
| Answer1, Answer2 | 12 | 
| Answer1, Answer3 | 54 | 
| Answer2, Answer1 | 65 | 
| Answer2, Answer1 | 5 | 
| Answer2, Answer1 | 15 | 
\--------------------+----/ 

其中N是給了兩個答案的受訪者數量。

然而,當我運行此查詢:

// Aantal antwoorden per wegingsgroep 
match (w:WeightingGroup)-[]->(a:Answer)<-[:Answered]-(r:Respondent) 
with w, collect(distinct a.Text) as answers, count(distinct r) as n 
return answers, w.Weight, n 

這似乎是返回N =的受訪者回答ANSWER1 OR ANSWER2數量。

如何得到答案1和答案2的答案人數?

提前致謝!

+0

如果我理解正確的您的要求,只需加上「WHERE長度(答案)> 1 「子句給你的查詢。 –

+0

請在http://console.neo4j.org上放置一個小樣本數據集並分享它 –

+0

我正在處理一個樣本數據集 –

回答

3

這樣的情況如何:每個小組收集答案,收集每個答覆者的答案,篩選答案的答案出現在答案中的所有答案。我想,然後在答辯計數應該沒問題(你必須提取答覆文件,因爲答案已經收集。)

MATCH (g:WeightingGroup)<-[:BelongsTo]-(a) 
WITH g, collect(a) as apg 
MATCH (r:Respondent)-[:Answered]->(a) 
WITH g, apg, r, collect(a) as apr 
WHERE ALL(a IN apr WHERE a IN apg) 
RETURN g.Weight, EXTRACT(a IN apg | a.Text), count(r) as n 
+0

感謝您的回答!對於遲到的響應(carnaval進來之間;)) 我試過這個查詢,但它崩潰neo4J(採取所有CPU和2GB內存)。這可能與數據庫包含超過600.000個給定答案有關。 –

+0

在你的問題中,有600k個可能的答案,他們的每個組合都是一個答案組?我認爲查詢可行,但您可能需要重構數據或分步進行分析。 – jjaderberg

+0

對不起,我的意思是6,000,000給出答案。我試過你的查詢樣本數據集,它確實給了我想要的結果,所以將其標記爲接受答案:) 但是我的Neo4j社區現在拒絕開始,所以我想我認真打破了什麼:( –

相關問題