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