我有一组匹配条款如下:
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中是否可能这样,或者在它的附近扩展中。