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:找到一个关系以及之前的5个关系_Neo4j_Cypher - Fatal编程技术网

Neo4j:找到一个关系以及之前的5个关系

Neo4j:找到一个关系以及之前的5个关系,neo4j,cypher,Neo4j,Cypher,我正在写一篇关于使用图表识别信用卡窃贼的博客文章。我的数据模型是这样的:人们通过交易与商家连接。交易有时间和状态(“有争议”或“无争议”)。欺诈性交易是指财产“有争议”的交易。简单的东西 人有一个“人”标签和以下属性:id、代码、, 姓名、标签、性别、年龄 商户有“商户”标签,并且 以下属性:id、代码、名称、街道、地址 只有一种关系:“have_buy_AT”。它具有以下属性: 数量、时间、状态 我正在尝试编写一个密码查询,以识别图形中的欺诈交易,并获取客户在欺诈交易之前进行的最后5次交易

我正在写一篇关于使用图表识别信用卡窃贼的博客文章。我的数据模型是这样的:人们通过交易与商家连接。交易有时间和状态(“有争议”或“无争议”)。欺诈性交易是指财产“有争议”的交易。简单的东西

  • 人有一个“人”标签和以下属性:id、代码、, 姓名、标签、性别、年龄
  • 商户有“商户”标签,并且 以下属性:id、代码、名称、街道、地址
  • 只有一种关系:“have_buy_AT”。它具有以下属性: 数量、时间、状态
我正在尝试编写一个密码查询,以识别图形中的欺诈交易,并获取客户在欺诈交易之前进行的最后5次交易

以下是我到目前为止得到的信息:

MATCH (victim:person)-[r:HAS_BOUGHT_AT]->(merchant)
WHERE r.status = "Disputed"
MATCH victim-[t:HAS_BOUGHT_AT]->(othermerchants)
WHERE t.status = "Undisputed" AND t.time < r.time
RETURN DISTINCT victim.name as customer_name, othermerchants.name as store_name, t.amount as amount, t.time as transaction_time
ORDER BY t.time DESC
MATCH(受害者:人)-[r:have_购买了\u AT]->(商户)
其中r.status=“有争议”
匹配受害者-[t:在]->购买了(其他商户)
其中t.status=“无可争议”和t.time
我有两个问题: -查询返回涉及非受害者的交易 -我不知道如何将结果限制在最近的5笔交易

有人知道我能做什么吗

最好的


Jean

关于你的第一个问题,你能提供更多关于你的实际数据模型和图表内容的细节吗?你如何定义“受害者”是什么?根据您当前的查询,“受害者”是指有“争议”交易的人。当你说你的查询返回的人不是受害者时,返回的是什么样的人(或“人”

至于你的第二个问题,试试这个:

MATCH (victim:person)-[r:HAS_BOUGHT_AT]->(merchant)
WHERE r.status = "Disputed"
MATCH victim-[t:HAS_BOUGHT_AT]->(othermerchants)
WHERE t.status = "Undisputed" AND t.time < r.time
WITH victim, othermerchants, t ORDER BY t.time DESC LIMIT 5
RETURN DISTINCT victim.name as customer_name, othermerchants.name as store_name, t.amount    as amount, t.time as transaction_time
ORDER BY t.time DESC
MATCH(受害者:人)-[r:have_购买了\u AT]->(商户)
其中r.status=“有争议”
匹配受害者-[t:在]->购买了(其他商户)
其中t.status=“无可争议”和t.time

(请注意“WITH”和“LIMIT”。第二个“ORDER BY”可能没有意义。)

谢谢。受害者可能是参与“有争议”交易的人。仔细检查后,第一个查询似乎只返回受害者。你提出的问题看起来不错。唯一的问题是我最终只得到了2个结果(12个没有限制条款)。你知道发生了什么吗?可能是“DISTINCT”正在运行的结果集只包含2个这样的“DISTINCT”结果,如果去掉5个的限制,则会显示12个不同的结果。若要确认,请尝试删除“DISTINCT”,查看返回的结果数量(有限制和无限制),并检查返回的实际值。我删除了DISTINCT,得到了2个结果中的5个。我去掉了DISTINCT和限制,得到了12个结果中的53个结果。这应该证明了我的建议:去掉DISTINCT得到5个结果,而不是2个结果,表明限制为5个结果,DISTINCT去掉了3个重复。这似乎回答了你的问题。:)如果是,请将我的答案标记为已接受。谢谢,祝你好运!