neo4j,在论坛结构中,如何找到每个 post 得到了多少响应(包括 child 的 child...)
neo4j, in a forum structure, how to find how many response each post got (including child of child...)
我正在编写一个程序来分析论坛中的 post。
将论坛主题加载到 neo4j DB、
后
我正在尝试 "Rank" posts 他们得到的回复数量。
回复 包括直接回复以及每个直接回复的整个 sub-tree。
这个想法是计算树下的所有 children(树是一棵简单的树 没有任何循环 )
每个post都是一个neo4j节点
# Create MSG nodes:
statement = "CREATE (c:MSG {id:{N}, title:{T}}) RETURN c"
for msg in msgs:
graph.cypher.execute(statement, {"N": msg[0], "T": msg[1]})
表示 post 的节点是对另一个 post 的响应,与他的 parent 有关系 r:CHILD_OF节点。
根节点不会有 r:CHILD_OF 关系,但会有一个“0”作为它们的 parent ID
|parent id | msg id | Rank | List of all responses
+----------+--------+------+----------------------
|0 | 1051 | 3 | (1054, 1056, 1060)
|1051 | 1054 | 0 |
|1051 | 1056 | 1 | (1060)
|1056 | 1060 | 0 |
|0 | 1052 | 0 |
在此table、
- 消息 1051 是线程中的第一个 post
- 消息 1052 是另一个线程中的第一个 post
- 消息 1051 得到 2 个直接响应(1054、1056)和另一个 in-direct 响应(1060)
- 消息 1056 得到 1 个直接响应 (1060)
我需要得到可以创建这个排名的密码。
但是不知道怎么写。
该项目在 python 中,我正在使用 python 2.7、py2neo 2.0.3、neo4j 2.1.6
这应该 return 树中所有不同的 children:
MATCH (message:MSG {id: {message_id}})<-[:CHILD_OF*0..]-(child:MSG)
RETURN DISTINCT child
如果你想要计数,你可以RETURN COUNT(DISTINCT child)
此查询应该 return 一个与您的 table 相似的结果集(但没有第一列):
MATCH (m:MSG)
OPTIONAL MATCH (c:MSG)-[:CHILD_OF*1..]->(m)
WITH m, COLLECT(DISTINCT c.id) AS childMsgIds
RETURN m.id AS `msg id`, LENGTH(childMsgIds) AS Rank, childMsgIds AS `List of all responses`
这符合您的需求吗?
我正在编写一个程序来分析论坛中的 post。
将论坛主题加载到 neo4j DB、
后
我正在尝试 "Rank" posts 他们得到的回复数量。
回复 包括直接回复以及每个直接回复的整个 sub-tree。
这个想法是计算树下的所有 children(树是一棵简单的树 没有任何循环 )
每个post都是一个neo4j节点
# Create MSG nodes: statement = "CREATE (c:MSG {id:{N}, title:{T}}) RETURN c" for msg in msgs: graph.cypher.execute(statement, {"N": msg[0], "T": msg[1]})
表示 post 的节点是对另一个 post 的响应,与他的 parent 有关系 r:CHILD_OF节点。
根节点不会有 r:CHILD_OF 关系,但会有一个“0”作为它们的 parent ID
|parent id | msg id | Rank | List of all responses
+----------+--------+------+----------------------
|0 | 1051 | 3 | (1054, 1056, 1060)
|1051 | 1054 | 0 |
|1051 | 1056 | 1 | (1060)
|1056 | 1060 | 0 |
|0 | 1052 | 0 |
在此table、
- 消息 1051 是线程中的第一个 post
- 消息 1052 是另一个线程中的第一个 post
- 消息 1051 得到 2 个直接响应(1054、1056)和另一个 in-direct 响应(1060)
- 消息 1056 得到 1 个直接响应 (1060)
我需要得到可以创建这个排名的密码。
但是不知道怎么写。
该项目在 python 中,我正在使用 python 2.7、py2neo 2.0.3、neo4j 2.1.6
这应该 return 树中所有不同的 children:
MATCH (message:MSG {id: {message_id}})<-[:CHILD_OF*0..]-(child:MSG)
RETURN DISTINCT child
如果你想要计数,你可以RETURN COUNT(DISTINCT child)
此查询应该 return 一个与您的 table 相似的结果集(但没有第一列):
MATCH (m:MSG)
OPTIONAL MATCH (c:MSG)-[:CHILD_OF*1..]->(m)
WITH m, COLLECT(DISTINCT c.id) AS childMsgIds
RETURN m.id AS `msg id`, LENGTH(childMsgIds) AS Rank, childMsgIds AS `List of all responses`
这符合您的需求吗?