2015-09-23 11 views
17

In un linguaggio di query Cypher per Neo4j, qual è la differenza tra una clausola CORRISPONDENZA subito dopo un'altra simili:Qual è la differenza tra più clausole MATCH e una virgola in una query Cypher?

MATCH (d:Document{document_ID:2}) 
MATCH (d)--(s:Sentence) 
RETURN d,s 

Versus modelli separati da virgole nella stessa clausola CORRISPONDENZA? Es .:

MATCH (d:Document{document_ID:2}),(d)--(s:Sentence) 
RETURN d,s 

In questo semplice esempio il risultato è lo stesso. Ma ci sono dei "trucchi"?

risposta

2

Non ci sono differenze tra questi a condizione che le clausole non sono collegati l'uno all'altro.

Se avete fatto queste cose:

MATCH (a:Thing), (b:Thing) RETURN a, b; 

Questo è lo stesso di:

MATCH (a:Thing) MATCH (b:Thing) RETURN a, b; 

Perché (e solo perché) a e b sono indipendenti. Se a e sono stati collegati da una relazione, il significato della query potrebbe cambiare.

13

C'è una differenza: le corrispondenze separate da virgola sono effettivamente considerate parte dello stesso modello. Quindi, ad esempio, la garanzia che ogni relazione appaia solo una volta nel percorso risultante viene confermata qui.

Separati MATCH sono operazioni separate i cui percorsi non formano un singolo modello e che non hanno queste garanzie.

1

Se una parte di una query contiene più schemi disconnessi, verrà creato un prodotto cartesiano tra tutte quelle parti. Ciò può produrre una grande quantità di dati e rallentare l'elaborazione della query. Sebbene sia destinato a volte, può essere spesso possibile riformulare la query che evita l'uso di questo prodotto incrociato, magari aggiungendo una relazione tra le diverse parti o utilizzando OPTIONAL MATCH (l'identificatore è: (a)). IN BREVE il loro è NO Differenza in entrambe le query, ma l'ha usata con molta attenzione.

Problemi correlati