【问题标题】:Relationship Labels and Index in Neo4JNeo4J 中的关系标签和索引
【发布时间】:2014-04-21 15:20:48
【问题描述】:

可以在新的 Neo4J 2.0.1 中标记节点,但是相同的标记是否适用于关系?如果我有 :TO 类型的关系,我可以像这样在其“语句”属性上创建索引吗?

 CREATE INDEX ON :TO(statement)

谢谢!

【问题讨论】:

    标签: indexing neo4j


    【解决方案1】:

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

    b) 关系上的模式索引是不可能的。图查询通常从节点而不是关系开始,因为节点是您域中的“事物”。恕我直言,从关系开始通常表明您需要重新考虑您的图形模型。如果您仍然确信需要关系索引,可以使用legacy indexing

    【讨论】:

    • 嗨 Stefan,是否有计划将标签和架构索引添加到关系中?我们有一个场景,我认为搜索关系并让它们具有多个标签确实有意义。我们在我们的域(人、地址等)中使用节点来表示“事物”,但关系包含元数据,这是我们对该关系的“证据”,例如它来自什么类型的文档,文档日期等。我们有不同文档类型的层次结构。现在我们可以使用多个遗留索引,但最好有标签和模式索引。谢谢
    • 我同意,限制您的用户必须重新考虑他们的图形模型,因为他们希望在他们的关系中包含元数据,这有点太强悍了。例如,在我的情况下,我需要这些数据能够跟踪 1)谁创建了关系,2)它是在哪个上下文中创建的,3)它是什么时候创建的,4)它是在什么语句中创建的.你建议我在这种情况下做什么?谢谢!
    • @StefanArmbruster 问题是我所说的关系实际上是一种关系。将其称为节点是对已经存在的抽象(节点、关系)的进一步抽象,在这种情况下,使用 Neo4J 的全部意义对我来说已经不复存在了,因为我可以在其他数据库中创建 2 个表并在那里表示该信息。这就是为什么我不想改变我的图形模型。你能想到任何其他的解决方案吗?谢谢!
    • 我同意 deemeetree。使用我们当前的模型,我们有有意义的关系,例如人--购买-->财产或人--是股东-->公司。如果我们在它们之间创建中间节点,那么我们就失去了所有意义,一切都变成了实体——出现在——>文档中。我想我们可以通过位于 Neo4j 之上的层在查询时重新添加该含义。这是您推荐的解决此问题的方法吗?当然,希望将元数据添加到关系中一定很常见,特别是创建它的人以及何时创建,并在查询中使用它。谢谢
    • 我也希望看到标记关系的能力。关系可以是多种类型中的一种,就像节点可以是多种类型中的一种一样。正如一个节点可以是一个人,他是一个演员,我可以想到需要将多个标签应用于单个关系。例如,购买房屋的行为可以被标记为投资、购买、生活决定或简单的交易。将标签应用于关系的能力使我们能够基于不同的上下文在网络中抽象谓词和查询。建议的替代方案使这变得困难。
    猜你喜欢
    • 1970-01-01
    • 2019-04-25
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多