from Util import * from py2neo import RelationshipMatcher # 连接数据库 db = Graph("neo4j://10.10.21.20:7687", auth=("neo4j", "DsideaL4r5t6y7u")) # 清空 clear(db) # ================== 第一部分:基础数据 ================== hero_nodes = [ Node("英雄", name="张无忌", power=180), Node("英雄", name="杨逍", power=100), Node("派别", name="明教") ] base_relations = [ (hero_nodes[1], '教主', hero_nodes[0]), (hero_nodes[0], '统领', hero_nodes[2]), (hero_nodes[1], '师出', hero_nodes[2]) ] create_subgraph(db, hero_nodes, base_relations) # ================== 第二部分:家庭关系 ================== family_nodes = [ Node('英雄', name='张翠山'), Node('英雄', name='殷素素'), Node('英雄', name='狮王谢逊'), Node('武当', name='张三丰') ] family_relations = [ (hero_nodes[0], '生父', family_nodes[0]), (hero_nodes[0], '生母', family_nodes[1]), (hero_nodes[0], '义父', family_nodes[2]), (hero_nodes[0], '师公', family_nodes[3]), (family_nodes[0], '妻子', family_nodes[1]) ] tx_create(db, family_nodes, family_relations) # ================== 第三部分:感情关系 ================== love_nodes = [ Node('美女', name='赵敏'), Node('美女', name='周芷若'), Node('美女', name='小昭'), Node('美女', name='蛛儿'), Node('美女', name='丁敏君'), Node('美女', name='灭绝师太') ] love_relations = [ (hero_nodes[0], 'Love', love_nodes[0]), (hero_nodes[0], 'knows', love_nodes[1]), (love_nodes[1], 'hate', love_nodes[0]), (hero_nodes[0], 'knows', love_nodes[2]), (love_nodes[3], 'Love', hero_nodes[0]), (love_nodes[1], '情敌', love_nodes[2]), (love_nodes[2], '情敌', love_nodes[3]), (love_nodes[4], '师姐', love_nodes[1]), (love_nodes[5], '师傅', love_nodes[4]), (love_nodes[5], '师傅', love_nodes[1]), ] tx_create(db, love_nodes, love_relations) # ================== 第四部分:统一查询 ================== def query_relations(db: Graph, rel_type: str) -> None: """统一关系查询方法""" matcher = RelationshipMatcher(db) print('=' * 30, f'{rel_type}关系', '=' * 30) for rel in matcher.match(r_type=rel_type): print(f"{rel.start_node['name']} -[{rel_type}]-> {rel.end_node['name']}") query_relations(db, 'hate') query_relations(db, '情敌')