Cypher - 最大连通公共子图

时间:2015-05-16 17:27:40

标签: cypher

我有一组匹配条款如下:

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中是否可能这样,或者在它的附近扩展中。

0 个答案:

没有答案