你如何决定关系的动词方向?
例如,我有一个国家属于一个子Region,而它又属于一个地区。哪一个会更好,在决定方向上有什么经验法则吗?
(Region)-HAS->(子区域)-HAS->(Country)
或
(地域)<-归属地-(子地域)<-归属地-(国家)
关于San
发布于 2016-11-11 07:43:16
我同意@InverFalcon的观点,即方向性主要是一个主观决定。然而,可能(至少)有一种情况下,您可能想要使用特定的方向,特别是如果这将使重要的用例更快。
这与以下事实有关:通常情况下,如果您可以使Cypher模式不那么具体(而不影响输出),那么neo4j必须做的工作就会更少,您的查询就会更快。
例如,假设您的整个数据模型由2个节点标签和2个关系类型组成,如下所示。(我使用自己的数据模型,因为我不知道您的用例是什么。)
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)为了找到演员出演的电影,您的查询必须如下所示。(请注意,我们必须指定ACTED_IN类型,因为传出关系也可以是DIRECTED类型。这意味着neo4j必须显式地测试其类型的每个传出关系):
MATCH (:Person {id: 123})-[:ACTED_IN]->(m:Movie)
RETURN m;但是,如果您的数据模型用具有相反方向的DIRECTED_BY类型替换了DIRECTED类型,那么它将看起来如下所示:
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)<-[:DIRECTED_BY]-(:Movie)通过这个调整,您的查询可能会更简单、更快(因为neo4j不必测试关系类型):
MATCH (:Person {id: 123})-->(m:Movie)
RETURN m;要完成此操作,请注意,在上面的两个MATCH模式中,我们实际上可以删除:Movie标签,因为在这两个数据模型中,ACTED_IN终端节点都将始终具有Movie标签。
https://stackoverflow.com/questions/40531596
复制相似问题