Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 将独立查询与_Neo4j_Cypher - Fatal编程技术网

Neo4j 将独立查询与

Neo4j 将独立查询与,neo4j,cypher,Neo4j,Cypher,我有两个单独的操作: MATCH ()<-[r:waitsFor]-() SET r.active = true WITH子句用于将返回的信息“结转”到查询的另一部分。在Neo4j中使用WITH null作为none并向前执行后续匹配容易受到笛卡尔乘积创建的影响。根据节点的数量,笛卡尔积爆炸可能是巨大的,需要花费大量时间 因此,如果第一个查询中的“r”在第二个查询中是缩小匹配范围所必需的,那么您应该使用WITH r。由于情况似乎并非如此(因为您将null用作none),因此这可能

我有两个单独的操作:

MATCH ()<-[r:waitsFor]-() 
  SET r.active = true 

WITH子句用于将返回的信息“结转”到查询的另一部分。在Neo4j中使用WITH null作为none并向前执行后续匹配容易受到笛卡尔乘积创建的影响。根据节点的数量,笛卡尔积爆炸可能是巨大的,需要花费大量时间

因此,如果第一个查询中的“r”在第二个查询中是缩小匹配范围所必需的,那么您应该使用WITH r。由于情况似乎并非如此(因为您将null用作none),因此这可能不是解决方案


在我看来,您的案例似乎在按顺序执行两个独立的查询。你应该看看这个条款。它用于连接两个查询并合并它们的结果。您拥有的选项是纯旧的
UNION
UNION ALL
(删除重复项)。

不要这样做。正如您所说,它们是独立的查询,所以请分别运行它们。按照现在运行它们的方式,第二个查询将对第一个查询中的每个匹配结果执行一次。我现在正在处理的一个小型本体图中的一个示例,有146个节点标记为
:OwlClass
。考虑下面两个查询

-查询1-

MATCH (c:OwlClass) 
RETURN COUNT(*)
MATCH (c:OwlClass) 
WITH null as n 
MATCH (d:OwlClass) 
RETURN COUNT(*)
MATCH (c:OwlClass)
WITH COUNT(c) as count_c
MATCH (d:OwlClass)
RETURN count_c, COUNT(d) as count_d
结果:

COUNT(*)
146
Returned 1 row in 102 ms
COUNT(*)
21316
Returned 1 row in 734 ms
count_c   count_d
146       146
Returned 1 row in 153 ms
执行计划:

==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATE01b2d10b-7bf4-43b4-a67d-fbe826c7a4dd"], returnItemNames=["COUNT(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATE01b2d10b-7bf4-43b4-a67d-fbe826c7a4dd,CountStar())"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATEe33d15c7-e357-4e32-9f7f-3fbc00dd58f6"], returnItemNames=["COUNT(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEe33d15c7-e357-4e32-9f7f-3fbc00dd58f6,CountStar())"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="d", _rows=21316, _db_hits=0)
==>     ColumnFilter(symKeys=["c", "n"], returnItemNames=["n"], _rows=146, _db_hits=0)
==>       Extract(symKeys=["c"], exprKeys=["n"], _rows=146, _db_hits=0)
==>         NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
==> ColumnFilter(symKeys=["count_c", "  INTERNAL_AGGREGATE17be6af7-abbb-4ef7-8250-ff050d6ba7c6"], returnItemNames=["count_c", "count_d"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=["count_c"], aggregates=["(  INTERNAL_AGGREGATE17be6af7-abbb-4ef7-8250-ff050d6ba7c6,Count(d))"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="d", _rows=146, _db_hits=0)
==>     ColumnFilter(symKeys=["  INTERNAL_AGGREGATE67abdc54-9c44-4353-bf82-e4aff895141e"], returnItemNames=["count_c"], _rows=1, _db_hits=0)
==>       EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATE67abdc54-9c44-4353-bf82-e4aff895141e,Count(c))"], _rows=1, _db_hits=0)
==>         NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
-查询2-

MATCH (c:OwlClass) 
RETURN COUNT(*)
MATCH (c:OwlClass) 
WITH null as n 
MATCH (d:OwlClass) 
RETURN COUNT(*)
MATCH (c:OwlClass)
WITH COUNT(c) as count_c
MATCH (d:OwlClass)
RETURN count_c, COUNT(d) as count_d
结果:

COUNT(*)
146
Returned 1 row in 102 ms
COUNT(*)
21316
Returned 1 row in 734 ms
count_c   count_d
146       146
Returned 1 row in 153 ms
执行计划:

==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATE01b2d10b-7bf4-43b4-a67d-fbe826c7a4dd"], returnItemNames=["COUNT(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATE01b2d10b-7bf4-43b4-a67d-fbe826c7a4dd,CountStar())"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATEe33d15c7-e357-4e32-9f7f-3fbc00dd58f6"], returnItemNames=["COUNT(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEe33d15c7-e357-4e32-9f7f-3fbc00dd58f6,CountStar())"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="d", _rows=21316, _db_hits=0)
==>     ColumnFilter(symKeys=["c", "n"], returnItemNames=["n"], _rows=146, _db_hits=0)
==>       Extract(symKeys=["c"], exprKeys=["n"], _rows=146, _db_hits=0)
==>         NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
==> ColumnFilter(symKeys=["count_c", "  INTERNAL_AGGREGATE17be6af7-abbb-4ef7-8250-ff050d6ba7c6"], returnItemNames=["count_c", "count_d"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=["count_c"], aggregates=["(  INTERNAL_AGGREGATE17be6af7-abbb-4ef7-8250-ff050d6ba7c6,Count(d))"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="d", _rows=146, _db_hits=0)
==>     ColumnFilter(symKeys=["  INTERNAL_AGGREGATE67abdc54-9c44-4353-bf82-e4aff895141e"], returnItemNames=["count_c"], _rows=1, _db_hits=0)
==>       EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATE67abdc54-9c44-4353-bf82-e4aff895141e,Count(c))"], _rows=1, _db_hits=0)
==>         NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
-查询3-

MATCH (c:OwlClass) 
RETURN COUNT(*)
MATCH (c:OwlClass) 
WITH null as n 
MATCH (d:OwlClass) 
RETURN COUNT(*)
MATCH (c:OwlClass)
WITH COUNT(c) as count_c
MATCH (d:OwlClass)
RETURN count_c, COUNT(d) as count_d
结果:

COUNT(*)
146
Returned 1 row in 102 ms
COUNT(*)
21316
Returned 1 row in 734 ms
count_c   count_d
146       146
Returned 1 row in 153 ms
执行计划:

==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATE01b2d10b-7bf4-43b4-a67d-fbe826c7a4dd"], returnItemNames=["COUNT(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATE01b2d10b-7bf4-43b4-a67d-fbe826c7a4dd,CountStar())"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATEe33d15c7-e357-4e32-9f7f-3fbc00dd58f6"], returnItemNames=["COUNT(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEe33d15c7-e357-4e32-9f7f-3fbc00dd58f6,CountStar())"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="d", _rows=21316, _db_hits=0)
==>     ColumnFilter(symKeys=["c", "n"], returnItemNames=["n"], _rows=146, _db_hits=0)
==>       Extract(symKeys=["c"], exprKeys=["n"], _rows=146, _db_hits=0)
==>         NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
==> ColumnFilter(symKeys=["count_c", "  INTERNAL_AGGREGATE17be6af7-abbb-4ef7-8250-ff050d6ba7c6"], returnItemNames=["count_c", "count_d"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=["count_c"], aggregates=["(  INTERNAL_AGGREGATE17be6af7-abbb-4ef7-8250-ff050d6ba7c6,Count(d))"], _rows=1, _db_hits=0)
==>   NodeByLabel(label="OwlClass", identifier="d", _rows=146, _db_hits=0)
==>     ColumnFilter(symKeys=["  INTERNAL_AGGREGATE67abdc54-9c44-4353-bf82-e4aff895141e"], returnItemNames=["count_c"], _rows=1, _db_hits=0)
==>       EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATE67abdc54-9c44-4353-bf82-e4aff895141e,Count(c))"], _rows=1, _db_hits=0)
==>         NodeByLabel(label="OwlClass", identifier="c", _rows=146, _db_hits=0)
--

自下而上阅读执行计划。本例中的相关部分是行数如何变化。比较查询2和查询3的粗略解释

查询2

  • 首先获取标签为
    OwlClass
    的所有节点。现在有146个匹配的模式
  • 通过将n设置为null来继续每个模式
  • 通过使用label
    OwlClass
    获取所有节点,继续每个模式。现在有146*146=21316个匹配模式
  • 数一数,把这些加起来。现在有一种模式(计数)。归还它 查询3

  • 首先获取标签为
    OwlClass
    的所有节点。现在有146个匹配的模式
  • 数一数,把这些加起来。现在有一种模式(计数)
  • 通过使用label
    OwlClass
    获取所有节点,继续每个模式。现在有146个匹配的模式
  • 数一数,把这些加起来。现在有一种模式(计数)。归还它

  • 你的意思是用r表示
    ,而不是用null表示none
    表示
    ?不,我不想把任何东西带到第二个查询中。你的第一个语句非常可疑,你真的没有这个关系连接到的任何起点或标签吗?它是简化的测试模型(5k节点,2k:关系的waitsFor).你能简单地解释一下最后一个执行计划吗?请从头至尾阅读。首先获取标签为
    OwlClass
    的所有节点。现在有146个匹配的模式。通过将n设置为null来继续每个模式。通过使用label
    OwlClass
    获取所有节点,继续每个模式。现在有146*146=21316个匹配模式。数一数,把这些加起来。现在有一种模式(计数)。返回它。如果为null,则由于none不会更改基数,因此必须将结果折叠/聚合为较小的基数