2017-08-26 5 views
0

Ceci est mon NRS 4 entités:SDN4 déclaration de succession et l'indice Neo4j à la classe de base

@NodeEntity 
public abstract class BaseEntity { 

    @Index(unique = false) 
    private Date createDate; 

.... 

} 

@NodeEntity 
public class Decision extends BaseEntity { 

.... 

} 

Ceci est :schema sortie:

Indexes 
    ON :BaseEntity(createDate) ONLINE 

et j'ai une requête Cypher suivante:

MATCH (d:Decision) WHERE d.createDate={createDate} 

AFAIK (Neo4j SDN4 entity inheritance and indexes) de cette façon, l'index Neo4j :BaseEntity(createDate) ne sera pas utilisé parce que j'essaye d'atteindre le noeud d: Étiquette de décision.

Est-il possible à 4 NRS pour définir l'index par héritage de classe (laisser createDate au niveau BaseEntity) afin de pouvoir utiliser createDate index sur l'étiquette :Decision?

Répondre

1

Si la requête est un finder dérivé alors il est lié à this issue. La seule façon de contourner ce problème maintenant est d'utiliser un @Query personnalisé.

Si la requête est une coutume @Query il vous suffit d'utiliser l'étiquette correcte dans la requête, notez que vous pouvez utiliser plusieurs étiquettes:

MATCH (d:Decision:BaseNode) 
WHERE d.createDate={createDate} 

Le planificateur devrait être assez intelligent pour faire la bonne chose et utilisez l'index, néanmoins vous devriez vérifier cela en utilisant PROFILE. Sinon, utilisez l'indice USING INDEX:

MATCH (d:Decision:BaseNode) 
USING INDEX d:BaseNode(createDate) 
WHERE d.createDate={createDate}