【Neo4j学习】应用案例( 二 )


文章插图
很明显就发现,几乎所有发票都是来自这个邮箱,主犯找到了 。
那么就可以发现这个主犯了 。那么这样就结束了吗?不不,我在上文说过“反向提问”是很有价值的,既然找到了主犯,那么我们不妨多看看,
他还会经常发什么邮件,这类邮件有什么特征 。从中挖掘出这类人,发垃圾邮箱的“套路” 。
MATCH m=(s:)-->(e:Email)-->(r:)
WHERE s.=~''
s,e,r
得到图:
仔细观察,你会发现,这个主犯的邮件除了含“发票”的字眼,还有“来电恰谈”,“费用优惠”等字眼 。那么这样我们就可以记住这样的字眼,下次就可以过滤这类字眼的邮件 。
通过上面这个例子,应该能体会到,图数据库,在处理垃圾邮件,查找信息的优势了 。特别是在处理“反向提问”的问题 。并且查询效率都是在毫秒级别的 。
4)企业关系构建
这里还是基于微云数聚公司的平台 。
MATCH (n:`公司`) RETURN n LIMIT 25
投资图:
MATCH a=(:公司 {名称:'中航工业集团公司'})-[r*]->() RETURN nodes(a)
这样对于公司就有一个直观的把握 。谁投资了谁,现金流的流向 。对于公司的财务管理也有直观的展现 。
担保图:
MATCH a=(:公司 {名称:'中航工业集团公司'})-[r:担保*]->() RETURN nodes(a)
等等
(5)社交关系分析,实现一个简单的好友推荐功能
这里我们会用到第二个案例的书籍库,首先创建好友圈 。
(小北:朋友圈{姓名:"小北",喜欢的书类:""}), (小菲:朋友圈{姓名:"小菲",喜欢的书类:" "}), (小鹏:朋友圈{姓名:"小鹏",喜欢的书类:"Music"}), (小颖:朋友圈{姓名:"小颖",喜欢的书类:""}), (小兰:朋友圈{姓名:"小兰",喜欢的书类:"Music"}), (小峰:朋友圈{姓名:"小峰",喜欢的书类:""}), (小讯:朋友圈{姓名:"小讯",喜欢的书类:""}), (小东:朋友圈{姓名:"小东",喜欢的书类:" Art"}), (小唯:朋友圈{姓名:"小唯",喜欢的书类:"Young Adult"}), (小窦:朋友圈{姓名:"小窦",喜欢的书类:""}), (小齐:朋友圈{姓名:"小齐",喜欢的书类:""}), (小林:朋友圈{姓名:"小林",喜欢的书类:""}), (小锐:朋友圈{姓名:"小锐",喜欢的书类:""}), (小伟:朋友圈{姓名:"小伟",喜欢的书类:"Young Adult"}), (小玲:朋友圈{姓名:"小玲",喜欢的书类:""}), (小讯)-[:认识]->(小窦), (小讯)-[:认识]->(小齐), (小讯)-[:认识]->(小林), (小讯)-[:认识]->(小鹏), (小讯)-[:认识]->(小伟), (小讯)-[:认识]->(小峰), (小菲)-[:认识]->(小鹏), (小菲)-[:认识]->(小峰), (小菲)-[:认识]->(小唯), (小峰)-[:认识]->(小北), (小峰)-[:认识]->(小兰), (小东)-[:认识]->(小林), (小东)-[:认识]->(小锐), (小东)-[:认识]->(小菲), (小鹏)-[:认识]->(小颖), (小北)-[:认识]->(小兰), (小颖)-[:认识]->(小东), (小唯)-[:认识]->(小鹏), (小唯)-[:认识]->(小锐), (小伟)-[:认识]→(小玲)
展现小峰的朋友圈:
MATCH n=(:朋友圈{姓名:"小峰"})-[*..6]-() return n
这里要引入几个概念 。
一度关系(直接关系)
MATCH n=(:朋友圈{姓名:"小讯"})-[:认识]-() return n
二度关系
MATCH n=(:朋友圈{姓名:"小讯"})-[*..2]-() return n
我曾经看到一个问题,如果你住在一个村子,要认识奥巴马,要经过几个人呢?答案是6个 。假设你在一个村里,那么村长,乡长,县长,市长,省长,国家主席,奥巴马,通过六个人就可以了 。所以你会发现,我们通常在6度深度搜索 。
两个陌生人之间的最短认识路径
我们可以用Neo4j来找到两个不认识的人,建立联系的最短路径 。