Neo4J中的关系标签和索引

12

在新的Neo4J 2.0.1中,可以给节点打标签,但是同样的标记对关系有用吗?如果我有一种类型为:TO的关系,我能否像这样在其“statement”属性上创建索引?

 CREATE INDEX ON :TO(statement)

谢谢你!

1个回答

9

a) 关系中不能有标签。一个关系只有一种类型(可以被认为是某种标签)。如果你需要多个标签,你只需创建具有不同类型的多个关系。

b) 关系上的模式索引是不可能的。图查询通常从节点开始,而不是从关系开始,因为节点是你领域中的“事物”。从关系开始查询通常意味着需要重新考虑你的图模型。如果你仍然坚持需要在关系上建立索引,你可以使用旧版索引


9
嗨 Stefan,是否有计划在关系中添加标签和模式索引?我们有一个场景,我认为在关系上进行搜索并使它们具有多个标签是有意义的。我们将节点用于域中的“事物”(人、地址等),但是关系包含元数据,这些元数据是我们对该关系的“证据”,例如它来自哪种类型的文档、文档日期等。我们有不同文档类型的层次结构。目前,我们可以使用多个旧版索引,但最好拥有标签和模式索引。谢谢。 - Damon Horrell
3
我同意,如果用户想在他们的关系中包含元数据,就限制他们必须重新考虑他们的图形模型有点过于强制。例如,在我的情况下,我需要这些数据来追踪1)谁创建了关系,2)它是在哪个上下文中创建的,3)它是什么时候创建的,4)在创建它时的陈述是什么。那么你建议我在这种情况下该怎么办?谢谢! - Aerodynamika
8
@StefanArmbruster,我的问题是我所说的关系确实就是一种关系。把它称为节点会进一步抽象已经存在的抽象(节点,关系),而在这种情况下使用 Neo4J 的整个意义对我来说都不存在了,因为我可以在其他数据库中创建两个表格并在那里表示这些信息。这就是为什么我不想改变我的图形模型。你能想到其他的解决方案吗?谢谢! - Aerodynamika
4
我同意deemeetree的观点。在我们当前的模型中,我们有着有意义的关系,如Person--bought-->Property或Person--is a shareholder of-->Company。如果我们在它们之间创建中间节点,那么我们将失去所有的含义,一切都会变成Entity--appears in-->Document。不过,我猜我们可以通过在Neo4j上层添加一个层来在查询时把这种含义再次加入进来。这是否是您推荐解决此问题的方法?肯定常常希望向关系添加元数据,特别是谁创建了它和何时创建,并在查询中使用它。谢谢。 - Damon Horrell
2
我也希望能够给关系打标签。一个关系可以有多种类型,就像一个节点可以有多种类型一样。就像一个节点可以是演员的人一样,我认为需要将多个标签应用于单个关系。例如,购买房屋的行为可以被标记为投资、购买、人生决策或简单交易。给关系打标签的能力使我们能够抽象谓词并根据不同的上下文查询网络。建议的替代方案使这变得困难。 - WildBill
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接