Neo4j关系模式索引
使用Neo4j 2.1.4和SDN 3.2.0.0发布 我有一个图,它将节点与具有关联UUID的关系连接起来。外部系统使用UUID作为标识关系的源和目标的手段。在SpringDataNeo4j(SDN)中,我们有一个Neo4j关系模式索引,neo4j,graph-databases,spring-data-neo4j,Neo4j,Graph Databases,Spring Data Neo4j,使用Neo4j 2.1.4和SDN 3.2.0.0发布 我有一个图,它将节点与具有关联UUID的关系连接起来。外部系统使用UUID作为标识关系的源和目标的手段。在SpringDataNeo4j(SDN)中,我们有一个@RelationshipEntity(type=“LINKED_TO”)类,它有一个@StartNode、@EndNode和一个字符串uuid字段。uuid字段是@索引的,Neo4j中的结果模式定义显示为 neo4j-sh (?)$ SCHEMA ==> Indexes ..
@RelationshipEntity(type=“LINKED_TO”)
类,它有一个@StartNode
、@EndNode
和一个字符串uuid
字段。uuid
字段是@索引的
,Neo4j中的结果模式定义显示为
neo4j-sh (?)$ SCHEMA
==> Indexes
...
==> ON :Link(uuid) ONLINE
...
但是,对数据运行密码查询,例如
MATCH ()-[r:LINKED_TO]->() WHERE uuid=’XXXXXX’ RETURN r;
对数据库进行完整扫描,需要很长时间
如果我试图通过运行
MATCH ()-[r:LINKED_TO]->() USING INDEX r:Link(uuid) WHERE uuid=’XXXXXX’ RETURN r;
我明白了
据我所知,在Neo4j中,关系应该是一等公民,但我看不出如何利用关系上的索引来防止类似于数据库上的表扫描的图形来定位关系
我知道有些帖子会问类似的问题,但是这个链接是两个节点之间的关系。如果我将链接转换为一个节点,我们将创建一个节点来表示一个关系,当我们在图形数据库中工作时,这个关系似乎是错误的-我将使用()-[:xxx]->(:Link)-[:xxx]->()
来表示一个关系。纯粹由于链接不能表示为关系,这将使模型变得混乱
链接
附带了一个我想要使用的唯一共享密钥。模式输出表明该字段有索引——我就是不能使用它
有人有什么建议吗
非常感谢,
Dave架构索引仅适用于节点。索引关系的唯一方法是使用旧索引或自动索引。传统索引需要在
START
子句中明确使用:
START r=relationship:my_index_name(uuid=<myuuid>)
RETURN r
START r=关系:我的索引名称(uuid=)
返回r
我不确定如何将其与SDN结合使用
旁注:需要关系索引几乎总是表示图形数据模型中存在错误。在您的域中作为
事物
或具有标识的一切都应该是一个节点。因此,如果一个关系需要uuid,可能该关系引用了一个对象,因此应该转换为一个节点,该节点与前一个开始节点具有入站关系,与前一个结束节点具有出站关系。我不明白。您的uuid
是节点属性还是关系属性?根据您的模式,您在:Link(uuid)
上有一个索引,其中Link
是一个只能存在于节点上的标签。但是在第二个查询中,您将标签放在关系旁边(这也解释了您的语法异常)。uuid
是一个关系属性。我认为在添加@索引(unique=true)字符串uuid时会有一些混淆在@RelationshipEntity(type=“LINKED_TO”)公共类链接上的code>导致SDN在(n:Link)assert n上执行创建约束。uuid是唯一的
,正如您所说,它实际上是在带有标签链接的节点上创建约束
,因此它不起作用。我认为这是SDN中的一个bug-它不应该允许@RelationshipEntity
上的@索引
。但是关于如何在链接
关系上索引属性,仍然存在一个完整的问题。
START r=relationship:my_index_name(uuid=<myuuid>)
RETURN r