【问题标题】:Count node depth in neo4j在 neo4j 中计算节点深度
【发布时间】:2014-11-23 06:15:26
【问题描述】:

我在 Neo4j 中有这个查询:

MATCH (sentence:Sentence)-[r*]->(n:Word )
WITH n, COUNT(r) AS c
RETURN n, c

我的图表是一个包含单词和它们之间的依赖关系的语言数据库。 此查询应返回节点深度,但 COUNT(r) 始终返回 1。 当我省略 COUNT 函数并只写时

WITH n, r AS c

相反(在网络浏览器 neo4j 界面中尝试),neo4j 按预期返回每个单词节点“n”的多个关系。 你能帮我我在做什么错吗,如何计算句子节点和单词节点之间的路径长度?谢谢。

【问题讨论】:

  • 您能描述一下您的 Neo4j 数据吗?这样我们就可以弄清楚那里出了什么问题。
  • 在下面查看我自己的答案。正如我所说,数据只是句子树的森林,我需要计算节点(句子中的单词)到根的距离。解决方案是 LENGTH(r),而不是 COUNT(r)。
  • 感谢您的评论。

标签: neo4j


【解决方案1】:

我认为它查询返回 n 和 c,并且 n 有多个记录,所以 count(r) 返回 1。

试试这个 -

MATCH (sentence:Sentence)-[r*]->(n:Word )
WITH n, LENGTH(r) AS depth
RETURN n, depth

你会得到这样的深度。

或者试试这个

   MATCH p= (sentence:Sentence)-->(n:Word)    
   RETURN n, length(p) as depth

http://docs.neo4j.org/chunked/stable/query-functions-scalar.html#functions-length

【讨论】:

  • 没有区别 - 所有“total_count”值再次为“1”。
【解决方案2】:

我自己终于找到了解决方案——它是 cypher 的 LENGTH 函数:

MATCH (sentence:Sentence)-[r*]->(n:Word )
WITH n, LENGTH(r) AS c
RETURN n, c

在这个有用的备忘单中找到:http://assets.neo4j.org/download/Neo4j_CheatSheet_v3.pdf

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多