【问题标题】:How do I find disconnected nodes on neo4j with Cypher?如何使用 Cypher 在 neo4j 上找到断开连接的节点?
【发布时间】:2011-12-29 15:06:09
【问题描述】:

我在玩 neo4j 并注意到所有 Cypher 查询都需要在 START 子句中找到一个起点。 我想知道如何使用 Cypher 找到所有断开连接的节点?

谢谢

【问题讨论】:

    标签: neo4j graph-databases cypher


    【解决方案1】:

    如果您的所有节点都已编入索引(例如通过自动索引),您可以使用索引查询作为起点,然后找到那些没有传出关系的节点。

    start n=node:node_auto_index("id:*")
    match n-[r?]->m
    where r is null
    return n
    

    现在我宁愿使用:

    start n=node:node_auto_index("id:*")
    where not (n-->m)
    return n
    

    【讨论】:

    • 有什么方法可以追溯索引?
    • 是的,但是您必须创建所需的索引,然后遍历所有节点并在适当的地方添加它们。在本机 java api 中,您将使用 GlobalGraphOperations.getAllNodes()
    • 恐怕我只能使用 REST 或 webadmin...有希望吗?
    • 应该可以使用 gremlin 控制台。首先启用自动索引,然后执行 gremlin 脚本。手头没有语法,但是像 g.V.each { it, idx -> it.id = idx } 这样的东西就足够了。
    • 这不能很好地回答问题。该查询仍将匹配通过入站连接连接到图的节点。
    【解决方案2】:

    我使用类似的东西,但仅当我使用 spring-data-neo4j 时:

        start n = node:__types__(className="com.app.entity.Model")
        // match, where...
        return n
    

    希望有帮助!

    【讨论】:

      【解决方案3】:

      我只使用 Neo4j v3.0+;

      MATCH (n)
      WHERE NOT (n)--()
      RETURN n
      

      (或其变体)。查询相当快。

      【讨论】:

        【解决方案4】:

        你不能。当今的 Cypher 无法进行图形全局查询。

        【讨论】:

        • 它们现在 (Neo4j 1.7) 与 start n=node(*) 匹配 ... where ... return n
        • 这个答案最终被否决了,但它在发布时似乎是准确的
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多