我有一组匹配子句,如下所示:

MATCH (target:C2)-[rvard:IN_LOCATION]->(nvarf:LOCATION), 
(nvara:LOCATION)-[rvara:CONNECTED]->(nvarb:LOCATION), 
(nvarc:C1)-[rvarb:IN_LOCATION]->(nvarb:LOCATION), 
(nvard:LOCATION)-[rvarc:CONNECTED]->(nvare:LOCATION), 
(nvarg:LOCATION)-[rvare:CONNECTED]->(nvarh:LOCATION), 
(target:C2)-[rvarf:HAS_VALUE]->(nvari:TRUE), 
(nvarj:LOCATION)-[rvarg:CONNECTED]->(nvark:LOCATION), 
(nvarl:AGENT)-[rvarh:IN_LOCATION]->(nvarf:LOCATION), 
(nvarm:LOCATION)-[rvari:CONNECTED]->(nvarn:LOCATION), 
(nvarm:LOCATION)-[rvarj:CONNECTED]->(nvark:LOCATION), 
(nvarm:LOCATION)-[rvark:CONNECTED]->(nvaro:LOCATION), 
(nvarp:AGENT)-[rvarl:IN_LOCATION]->(nvarq:LOCATION), 
(nvarq:LOCATION)-[rvarm:CONNECTED]->(nvaro:LOCATION), 
(nvarb:LOCATION)-[rvarn:CONNECTED]->(nvarm:LOCATION), 
(nvarf:LOCATION)-[rvaro:CONNECTED]->(nvarh:LOCATION), 
(nvarf:LOCATION)-[rvarp:CONNECTED]->(nvare:LOCATION), 
(nvare:LOCATION)-[rvarq:CONNECTED]->(nvarq:LOCATION)  
RETURN DISTINCT target 

所有子句共同创建一个连接的子图。

我想修改此查询,以便Cypher找到受最多匹配子句约束的目标,即删除不匹配子句的最少数量。 一种方法是使所有子句都是可选的,收集非空关系并选择具有最大收集关系集的目标。

对匹配的任何有效搜索都将从目标变量的可能值开始,并从这些值沿着通过路径连接到目标的关系扩展。 但是,我不认为Cypher具有这种优化方法,因此,即使对于100个节点的中等大小的图形,该方法也是完全难以处理的。

在Cypher中是否有解决此问题的简便方法? 如果没有,我将如何使用遍历框架来解决这个问题?

我刚刚在Neo4j 2.2中了解了成本计划器。 成本费用计划程序可能会自动为这种查询生成好的查询计划,尽管当前它不适用于这种查询。 如果是这种情况,最好知道在此版本的Neo4j或对其的扩展中是否有可能。

  ask by Michael Anslow translate from so

本文未有回复,本站智能推荐:

1回复

连接两组节点的高效密码查询匹配子图

我的问题如下。 我在Neo4j中有一个小但密集的网络(~280个节点,~3600个关系)。 只有一种类型的节点和一种类型的边缘(即每种节点都有一个标签)。 现在,我想指定两个不同的节点组,由“group”属性的值给出,并匹配包含连接两个组的特定长度的所有路径的子图。 另外我想对关系添加约
1回复

检索密码中2个连接节点之间的公共属性

如何在Neo4j中找到2个连接的节点之间的公共属性? 例如,我有2个以下连接的节点。 和 我知道这两个节点已连接。 它们也具有共同的属性。 我想知道如何使用cypher检索这些常见属性。
1回复

密码-从结果中删除子图

我有以下图图布局 如您所见,该图具有以下关系: (u::4)-[ADDED_RESOURCE]->(:resource)<-[ADDED_RESOURCE]-(u::3) \\\\ u::4, u::3 are the ids of the nodes 。 (u
1回复

尝试在足球数据库中获取最大连续胜利数

因此,我试图从我的足球数据库中获得最长的连胜纪录。 我知道在堆栈溢出方面有很多类似的问题,但是大多数解决方案最终只是增加每个团队的总胜利,这不是我想要获得的。 我的目标是获得球队有史以来最长的连胜纪录。 本质上,如果team1玩了10场比赛,并且在这10场比赛中连续赢了6次,然后输了1
1回复

密码查询可将搜索限制到特定的子图

我有一个Neo4j数据库,其中包含许多断开连接的子图(通过设计)。 每个子图都有一个“组织”节点作为其根/起始节点。 目的是使每个组织只能查询自己的子图。 我在图的前面有一个webapp,提供了用户所属组织的ID。 组织的所有节点都与组织节点有关系。 如果您知道根/起始节点,则
1回复

Neo4j:通过连接数组的最大值进行密码排序

所以,我有以下查询: MATCH result=(({uuid: "056d7d6c-4eb1-11e8-a2d0-3035adbe14a4"})-[r:mailed]-(p)) RETURN result LIMIT 5 。 它应该获取与给定节点已通过邮件发送连接的所有节点。 现
1回复

从起始节点删除整个子图-子图是连接的组件

我正在尝试使用以下查询删除整个子图: 子图中的所有组件均已连接。 起始节点确实存在。 最大链长为6。但是,我收到以下错误:
1回复

密码平均值的最大值

我已经开始学习Cypher,并且遇到了聚合问题。 我的数据库具有节点MOVIE和关系RATED(它具有“评级”属性)。 我想要一个具有最大平均评分的节点[我的意思是max(avg(rating))]。 不幸的是,当我在第二部分中添加“ m”和“ ar”时,我收到的是每一行的最大值,但是我需
1回复

连接密码中的空值

我在密码中遇到了一个奇怪的情况: 正常,预期。 现在尝试使用null连接: 这是正确的行为吗? 为什么cypher不会像人们期望的那样返回“ Foonull”,例如在Java或大多数其他语言中?
1回复

所有节点上的密码索引公共属性

根据新的索引auto_index规则, auto_index会在将来消失,并有望使用cypher创建索引。 按照这种新方式,要索引节点属性,必须提供节点标签。 我在所有类型的节点标签(用户,雇员,银行,汽车等)上都有一个“ nodeId”属性 。如果知道它的nodeId ,我通常会自动为