1、Node
2、relationships
3、path
1、路径查询
根据起始节点与目标节点查询关系图
cypher语句
MATCH p=(n)-[*..3]->(m)
where n.name = '韩国' and m.name = '中国'
return p limit 10
查询结果
查询处理
def pathFinding(kgName, sourceName, targetName):
graph = graphClient
cates, filtEntity, filtRela = [], [], []
result = {}
entityList, relationList = [], []
query = ''' MATCH p=(n)-[*..3]-(m) where n.name contains('{}') and m.name contains("{}")
return p limit 10 '''.format(sourceName.strip(), targetName.strip())
print('''====关系查询''', query)
try:
res = graph.run(query).data()
print(type(res), len(res))
for i in res:
i = i['p']
for r in i.relationships:
print(type(r), r)
print(r['name'])
print(r.identity)
print(type(r.start_node), type(r.end_node))
print(r.start_node, r.end_node)
ids = r.start_node['objId']
if ids not in filtEntity:
nd = {}
nd['id'] = r.start_node['objId']
nd['name'] = r.start_node['name']
if sourceName in nd['name']:
nd['category'] = '起始节点'
cates.append('起始节点')
elif targetName in nd['name']:
nd['category'] = '目标节点'
cates.append('目标节点')
else:
nd['category'] = r.start_node['category']
cates.append(nd['category'])
entityList.append(nd)
filtEntity.append(ids)
ide = r.end_node['objId']
if ide not in filtEntity:
nd = {}
nd['id'] = r.end_node['objId']
nd['name'] = r.end_node['name']
if sourceName in nd['name']:
nd['category'] = '起始节点'
cates.append('起始节点')
elif targetName in nd['name']:
nd['category'] = '目标节点'
cates.append('目标节点')
else:
nd['category'] = r.start_node['category']
cates.append(nd['category'])
entityList.append(nd)
filtEntity.append(ide)
idr = r.identity
if idr not in filtRela:
link = {}
link['id'] = str(idr)
link['source'] = r.start_node['objId']
link['target'] = r.end_node['objId']
link['name'] = r['shortName']
relationList.append(link)
filtRela.append(idr)
result['entityList'] = entityList[:]
result['relationList'] = relationList[:]
cates = [{'name': i} for i in list(set(cates))]
result['cates'] = sorted(cates, key=lambda e: e.__getitem__('name'))
print("====所有分类排序", result['cates'])
return result
except Exception as e:
print("=====error 路径查询错误", e)
result['entityList'] = entityList[:]
result['relationList'] = relationList[:]
result['cates'] = cates
return result