2014-02-28 69 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社区现在拒绝开始,所以我想我认真打破了什么:( –

相关问题