我需要创建一个python函数,以便它添加节点和与图形的关系,并返回创建的节点和关系的数量。
我已经使用graph.cypher.execute()添加了节点和关系。
arr_len = len(dic_st[story_id]['PER'])
for j in dic_st[story_id]['PER']:
graph.cypher.execute("MERGE (n:PER {name:{name}})",name = j[0].upper()) #creating the nodes of PER in the story
print j[0]
for j in range(0,arr_len):
for k in range(j+1,arr_len):
graph.cypher.execute("MATCH (p1:PER {name:{name1}}), (p2:PER {name:{name2}}) WHERE upper(p1.name)<>upper(p2.name) CREATE UNIQUE (p1)-[r:in_same_doc {st_id:{st_id}}]-(p2)", name1=dic_st[story_id]['PER'][j][0].upper(),name2=dic_st[story_id]['PER'][k][0].upper(),st_id=story_id) #linking the edges for PER nodes
我需要的是返回新节点和创建的关系的数量。
我从neo4j文档中得知的是,有一些名为&#34; ON CREATE&#34;和#34; ON MATCH&#34;对于加密的MERGE,但这不是很有用。 neo4j的浏览器界面确实显示节点数和关系更新。这是我需要返回的内容,但我没有完全接触它。
请帮助。
答案 0 :(得分:0)
如果您需要创建或更新属性的确切计数,则使用“匹配”与“创建”或“匹配”与“设置”,然后计算结果的大小。合并可能不会返回哪些更新以及哪些更新。
答案 1 :(得分:0)
当您post
对Cypher endpoint of the neo4j REST API进行查询而不使用py2neo时,可以在帖子请求中包含参数"includeStats": true
以获取节点/关系统计信息。有关示例,请参阅this question。
据我所知,py2neo目前不支持Cypher查询的其他参数(即使它在引擎盖下使用相同的API端点)。
在Python中,你可以做这样的事情(使用requests和json包):
import requests
import json
payload = {
"statements": [{
"statement": "CREATE (t:Test) RETURN t",
"includeStats": True
}]
}
r = requests.post('http://your_server_host:7474/db/data/transaction/commit',
data=json.dumps(payload))
print(r.text)
响应将包括有关创建的节点数等的统计信息。
{
"stats":{
"contains_updates":true,
"nodes_created":1,
"nodes_deleted":0,
"properties_set":1,
"relationships_created":0,
"relationship_deleted":0,
"labels_added":1,
"labels_removed":0,
"indexes_added":0,
"indexes_removed":0,
"constraints_added":0,
"constraints_removed":0
}
}
答案 2 :(得分:0)
使用x = session.run(...)
执行查询后,您可以使用x.summary.counters
获取Martin Perusse答案中记录的统计信息。请参阅文档here。
在旧版本中,计数器可用作x._summary.counters
下的“私人”字段。