【发布时间】:2019-05-08 22:11:16
【问题描述】:
短版:我需要得到一个可以包含不同方向的不同关系的路径。但是,我对我的路径有一个限制,如果它包含特定类型的连续关系,那么这两个关系必须在同一个方向上。
长版: 我正在使用下面的查询来获取两个节点之间的路径:
MATCH p=shortestPath((n:Class { code: '1' })-[r*]-(m:Class { code: '4'})) WHERE NONE(x IN NODES(p) WHERE 'Ontology' in labels(x)) return p
查询正确地返回了两个节点之间的最短路径。但是我需要进一步限制这个查询,使它只返回特定类型的连续关系在同一方向的路径。
例如,假设-a->需要同向关系,则不应该返回(1)-a->(2)<-a-(3)-b->(4),但可以返回(1)-a->(6)-a->(3)-b->(7)<-c-(5)<-d-(6)-e->(4)或(3)-b->(7)<-c-(4)。
以上示例只是对我的真实数据的简化。在我的实际用例中,我需要找到具有 IRI 的节点之间的最短路径
http://elite.polito.it/ontologies/dogont.owl#Actuator 和另一个具有 IRI http://elite.polito.it/ontologies/dogont.owl#StateValue 的节点。下面的查询是对我需要的路径进行编码的特定查询,它返回一个路径,即该路径存在。我需要使用最短路径使其更通用。
MATCH p=(n:Class {iri: 'http://elite.polito.it/ontologies/dogont.owl#Actuator'})-->(a:Class)<--(b:ObjectProperty{iri:'http://elite.polito.it/ontologies/dogont.owl#hasState'})-->(c:Class{iri:'http://elite.polito.it/ontologies/dogont.owl#State'})<--(d:Class{iri:'http://elite.polito.it/ontologies/dogont.owl#hasStateValue'})-->(e:Class{iri:'http://elite.polito.it/ontologies/dogont.owl#StateValue'}) return p
这可以通过 cypher 实现吗?
【问题讨论】:
标签: neo4j cypher path-finding