关系上基于节点的属性

时间:2019-01-07 19:39:25

标签: neo4j cypher graph-databases

我从Neo4J开始创建用户及其关系图。目前,用户之间只有一个“知识”关系,即

enter image description here

我现在要做的是为每个用户专门指定关系的属性。例如,“兴趣”表示一个用户对另一个用户的兴趣。我可以在单个KNOWS关系上为每个用户指定此属性,还是需要在用户之间创建两个关系并在每个关系上设置属性?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

我可以在单个KNOWS关系上为每个用户指定此属性(属性:兴趣),还是需要在用户之间创建两个关系并在每个关系上设置属性?

您将需要两个关系。

您可以使用其中一个执行此操作,但随后必须在关系中保留两个属性,并获取有关哪个属性与哪个节点一起使用的信息。有两个关系要容易得多。

来自评论:

  

我可以将它们保持为双向还是需要使用定向   在这种情况下?

关系始终是定向的。只有当您查询时才出现双向的概念,但实际上并不是双向的,它是没有方向的,例如(a)-[r]-(b)。因此,您将使用(a)-[r]->(b)(b)-[r]->(a)(a)<-[r]-(b)。如果查询方向,那么您将知道如何应用关系属性。

我通常将Java作为embedded应用程序而不是Cypher来做更多的工作,并且使用定向查询是值得的,因为它减少了执行关联的代码。


注意

由于您的情况如此简单,请尝试各种方法并查看有效的方法。请记住要跟踪查询花费的时间,并在必要时添加索引。还可以使用查询分析工具来确保您进行有效的查询。