如何使用Neo4j POLE数据集查询指定地址犯罪记录及数量
Neo4j POLE 数据集双范围犯罪案件查询方案
POLE 数据集内置的图关系中,:Crime 节点代表单条犯罪记录,:Location 节点代表案发地点,两类节点通过 :OCCURRED_AT 关系关联,:Location 节点的address属性存储具体门牌号地址,area属性存储所属区域名。
可用查询语句
直接运行以下Cypher即可同时返回两类案件的明细列表与对应统计值:
// 匹配目标地址关联案件 MATCH (c:Crime)-[:OCCURRED_AT]->(loc:Location {address: "27 Maiden Close"}) WITH collect(DISTINCT c) AS address_cases // 匹配目标区域关联案件 MATCH (c:Crime)-[:OCCURRED_AT]->(loc:Location {area: "Piccadilly"}) WITH address_cases, collect(DISTINCT c) AS area_cases // 合并返回分类结果与统计 RETURN "27 Maiden Close 案发案件" AS case_type, address_cases AS case_details, size(address_cases) AS case_total UNION ALL RETURN "Piccadilly 区域案发案件" AS case_type, area_cases AS case_details, size(area_cases) AS case_total
结果说明
- 返回结果共2行,分别对应两个查询范围的结果
case_details字段为对应范围内所有犯罪案件的节点列表,点击可查看案件的全部属性(包括犯罪类型、发生时间等)case_total字段为对应范围的案件总数,自动做了去重处理,不会重复统计同一案件
排查适配
如果运行后无返回结果,先运行以下语句校验数据集内的地址、区域属性值是否存在拼写/空格差异:
MATCH (l:Location) WHERE l.address CONTAINS "Maiden Close" OR l.area CONTAINS "Piccadilly" RETURN l.address, l.area LIMIT 20
根据返回的实际属性值调整查询里的匹配字符串即可。
内容的提问来源于stack exchange,提问作者Roy Awill
相关产品推荐
相关产品推荐

