SDN4 Neo4j 继承和基址索引声明 class
SDN4 Neo4j inheritance and index declaration at base class
这是我的 SDN 4 实体:
@NodeEntity
public abstract class BaseEntity {
@Index(unique = false)
private Date createDate;
....
}
@NodeEntity
public class Decision extends BaseEntity {
....
}
这是:schema
输出:
Indexes
ON :BaseEntity(createDate) ONLINE
我有以下 Cypher 查询:
MATCH (d:Decision) WHERE d.createDate={createDate}
AFAIK () 这样 Neo4j 索引 :BaseEntity(createDate)
将不会被使用,因为我试图到达 :Decision 标签上的 d 节点。
SDN 4 是否有任何方法通过 class 继承定义索引(将 createDate
保留在 BaseEntity
级别)以便能够使用 createDate
索引在 :Decision
标签上 ?
如果查询是 派生的查找器 那么它与 this issue 相关。现在解决此问题的唯一方法是使用自定义 @Query
.
如果查询是自定义的 @Query
您只需要在查询中使用正确的标签,请注意您可以使用多个标签:
MATCH (d:Decision:BaseNode)
WHERE d.createDate={createDate}
计划者应该足够聪明,可以做正确的事情并使用索引,但是您应该使用 PROFILE
验证这一点。如果不使用 USING INDEX
提示:
MATCH (d:Decision:BaseNode)
USING INDEX d:BaseNode(createDate)
WHERE d.createDate={createDate}
这是我的 SDN 4 实体:
@NodeEntity
public abstract class BaseEntity {
@Index(unique = false)
private Date createDate;
....
}
@NodeEntity
public class Decision extends BaseEntity {
....
}
这是:schema
输出:
Indexes
ON :BaseEntity(createDate) ONLINE
我有以下 Cypher 查询:
MATCH (d:Decision) WHERE d.createDate={createDate}
AFAIK (:BaseEntity(createDate)
将不会被使用,因为我试图到达 :Decision 标签上的 d 节点。
SDN 4 是否有任何方法通过 class 继承定义索引(将 createDate
保留在 BaseEntity
级别)以便能够使用 createDate
索引在 :Decision
标签上 ?
如果查询是 派生的查找器 那么它与 this issue 相关。现在解决此问题的唯一方法是使用自定义 @Query
.
如果查询是自定义的 @Query
您只需要在查询中使用正确的标签,请注意您可以使用多个标签:
MATCH (d:Decision:BaseNode)
WHERE d.createDate={createDate}
计划者应该足够聪明,可以做正确的事情并使用索引,但是您应该使用 PROFILE
验证这一点。如果不使用 USING INDEX
提示:
MATCH (d:Decision:BaseNode)
USING INDEX d:BaseNode(createDate)
WHERE d.createDate={createDate}