Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 用于按时间隔离记录的密码查询_Neo4j_Cypher - Fatal编程技术网

Neo4j 用于按时间隔离记录的密码查询

Neo4j 用于按时间隔离记录的密码查询,neo4j,cypher,Neo4j,Cypher,我正在尝试对手机通话数据进行CDR通话详情记录分析。电话是由一个人通过电话塔拨打的,并连接到一个号码。我想隔离在特定日期和时间之前拨打的电话,并且在记录中该特定日期和时间之后不存在呼叫号码。我当前的查询仅显示我正在查找的特定事件之前的数据: MATCH (a:PERSON)-[t:THROUGH]->()-[:CONNECTS]->(b) WHERE toInteger(t.time)<1500399900 RETURN a,b 但是,我现在如何只隔离那些在t.time=15

我正在尝试对手机通话数据进行CDR通话详情记录分析。电话是由一个人通过电话塔拨打的,并连接到一个号码。我想隔离在特定日期和时间之前拨打的电话,并且在记录中该特定日期和时间之后不存在呼叫号码。我当前的查询仅显示我正在查找的特定事件之前的数据:

MATCH (a:PERSON)-[t:THROUGH]->()-[:CONNECTS]->(b)
WHERE toInteger(t.time)<1500399900
RETURN a,b
但是,我现在如何只隔离那些在t.time=1500399900之前存在的记录,而不是在t.time=1500399900之后存在的记录

让我们创建一个小示例数据集:

CREATE 
  (a1:PERSON {name: 'a1'}), (a2:PERSON {name: 'a2'}),
  (b1:PERSON {name: 'b1'}), (b2:PERSON {name: 'b2'}),
  (b3:PERSON {name: 'b3'}), (b4:PERSON {name: 'b4'}),
  (a1)-[:THROUGH {time:  1}]->(:TOWER)-[:CONNECTS]->(b1),
  (a1)-[:THROUGH {time:  3}]->(:TOWER)-[:CONNECTS]->(b2),
  (a2)-[:THROUGH {time:  2}]->(:TOWER)-[:CONNECTS]->(b3),
  (a2)-[:THROUGH {time: 15}]->(:TOWER)-[:CONNECTS]->(b4)
当可视化时,它看起来是这样的:

此查询可能对您有帮助:

MATCH (a:PERSON)-[t1:THROUGH]->(:TOWER)-[:CONNECTS]->(b:PERSON)
WHERE toInteger(t1.time) < 5
OPTIONAL MATCH (a)-[t2:THROUGH]->(:TOWER)
WHERE t2.time >= 5
WITH a, b, t1, t2
WHERE t2 IS NULL
RETURN a, b, t1
在第一次匹配之后,它将查找在时间戳5之后启动的人员a的呼叫。可能没有这样的调用,因此我们使用它。如果在指定的时间戳之后没有调用,则t2的值将为null,因此我们进行检查并返回筛选结果

此外,如果我不将上述查询限制为1000,我的浏览器Google Chrome就会崩溃。有什么解决办法吗

如果使用graph visualizer,它通常无法渲染超过几百个节点。可能的解决办法:

使用缩放效果更好的web浏览器的文本视图。 通过使用分页。
你如何识别电话号码?每个人都有一个唯一的电话号码吗?@gabor是的,每个人都有一个唯一的呼叫号码。恐怕这不起作用。给我零结果。我在R中尝试了这个问题,得到了大约82000个结果。观察的总数略超过200000。至少有两件事我可能没有弄对:1。我在第二次匹配中重用了变量a。相反,您可以以某种方式重用它的number属性:MATCH:PERSON{number:a.number}-[t2:THROUGH]->:tower2。我对检查与时间>=1500399900的关系的解释正确吗?我在尝试你的建议,是的,你对贯穿的假设是正确的。它有一个名为time的属性。另外,我也在尝试你的建议,但我要把时间用在智力上。要花很长时间才能运行…@GaborSzarnyas可能只需要一个可选的match@aldrin很好。我相应地更新了我的答案,并添加了一个示例。
MATCH (a:PERSON)-[t1:THROUGH]->(:TOWER)-[:CONNECTS]->(b:PERSON)
WHERE toInteger(t1.time) < 5
OPTIONAL MATCH (a)-[t2:THROUGH]->(:TOWER)
WHERE t2.time >= 5
WITH a, b, t1, t2
WHERE t2 IS NULL
RETURN a, b, t1