【问题标题】:Neo4j Cypher query running endlesslyNeo4j Cypher 查询无休止地运行
【发布时间】:2019-02-22 01:24:34
【问题描述】:

过去两天我多次重新运行下面的查询,Neo4j 界面显示它正在运行,但它似乎在无休止地运行。我已经运行了所有返回输出的其他查询。我让查询运行了 9 小时,9 小时后它仍在运行。我不确定问题是什么,但希望能提供任何帮助。 我正在运行 Neo4j-community-2.3.12,它是一个旧版本,但它应该可以工作,因为我正在按照教程进行操作,并且其余查询工作正常。

密码脚本 - 非常基本:

match p=(ione)-[:ResponseTo*]->(itwo)
where length(p)=9 with p
match (u)-[:CreateChat]->(i)
where i in nodes(p)
return count(distinct u);

查询无休止运行的图片:

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    这个查询看起来像一个无限循环。

    我建议不要获取所有路径并稍后检查长度,而是获取所需长度的路径(9)。

    另外,考虑在路径查询中添加标签。

    match p=(ione)-[:ResponseTo*9]->(itwo)
    with p
    match (u)-[:CreateChat]->(i)
    where i in nodes(p)
    return count(distinct u); 
    

    【讨论】:

      【解决方案2】:

      正如 Raj 所说,您将希望在其中使用标签,因为目前这是在进行所有节点扫描,但效果不佳。

      我们还可以通过确保我们从之前匹配的节点开始 i 来确保第二个匹配的性能更高,而不是在匹配之后将其用作过滤器:

      match p=(ione)-[:ResponseTo*9]->(itwo)
      unwind nodes(p) as i
      with DISTINCT i
      match (u)-[:CreateChat]->(i)
      return count(distinct u); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多