2014-09-16 13 views
5

Sto usando neo4j 2.1.4. Ho nodi - POINT e le relazioni - STRADA Ho indice sulla proprietà ROAD - OBJ_CODCome utilizzare l'indice delle relazioni in Cypher

:schema ls -l :ROAD 

Indexes 
    ON :ROAD(OBJ_COD) ONLINE 
    ON :ROAD(ID)  ONLINE 

No constraints 

voglio cercare Road di valore OBJ_COD, ma indice di don'use cifra per ricerca relazione.

neo4j-sh (?)$ profile MATCH (a)-[r:`ROAD` {ID:333275}]-(b:`POINT`) RETURN r LIMIT 1; 

ColumnFilter 
    | 
    +TraversalMatcher 

+------------------+------+---------+-------------+----------------+ 
|   Operator | Rows | DbHits | Identifiers |   Other | 
+------------------+------+---------+-------------+----------------+ 
|  ColumnFilter | 2 |  0 |    | keep columns r | 
| TraversalMatcher | 2 | 2265843 |    |  a, r, a | 
+------------------+------+---------+-------------+----------------+ 

Come posso forzare Cypher a utilizzare l'indice esistente per cercare una singola relazione?

risposta

4

L'indice di schema è disponibile solo sui nodi. La necessità di avere indici sulle relazioni rivela quasi sempre un problema nella modellazione dei dati del grafico. Solitamente si utilizzano gli indici per cercare i punti iniziali per gli attraversamenti grafici. Una buona pratica di modellazione è che qualsiasi cosa nel tuo dominio sia un thing o entity dovrebbe essere un nodo e la relazione metti il ​​tuo things in un contesto semantico. Se segui questo e le tue domande iniziano da something non ci sarà bisogno di relazioni di indicizzazione.

Tuttavia, vi sono alcuni rari casi in cui l'indicizzazione delle relazioni potrebbe essere una scelta valida. In questo caso è necessario tornare indietro per utilizzare gli indici legacy per le relazioni. Esamina lo fine documentation per capire come funzionano.

Problemi correlati