You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.4 KiB

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, '情敌')