2015-05-27 14 views
45

Sto usando Neo4J per rappresentare i testi; nel caso più semplice, un testo è una sequenza di parole unite dalla relazione LEMMA_TEXT.Perché Neo4J mi sta dicendo che non c'è un cucchiaio?

Sto cercando di trovare l'ennesima parola dopo una parola conosciuta, con una query che assomiglia a questa.

MATCH (anchor)-[:LEMMA_TEXT*32]->(word) 
WHERE id(anchor) = 3275 
RETURN word 

In un caso particolare, se aumentare la lunghezza del percorso a 33, ottengo questo errore:

Neo.DatabaseError.Statement.ExecutionFailure: There is no spoon. 

Eppure la seguente query restituisce il risultato corretto.

MATCH (anchor)-[:LEMMA_TEXT*32]->(word)-[:LEMMA_TEXT]->(next) 
WHERE id(anchor) = 3275 
RETURN next 

che dimostra che il nodo I want esiste ed è raggiungibile.

Dov'è la sezione del manuale che mi dice come piegare il cucchiaio con la mente? Ancora più importante, cosa significa in realtà ?!

+0

saresti in grado di condividere il tuo database per testare con noi? –

+0

quale versione di Neo4j stai usando, puoi provare il 2.2.2 più recente? –

+0

Grazie per la risposta! Ricevo ancora un errore in 2.2.2: 'Neo.DatabaseError.Statement.ExecutionFailure: tentato inaspettatamente di calcolare la cardinalità di una relazione [* 0..0 ]' Posso fornire una copia del DB se è necessario - fammi sapere dove inviare un link – tla

risposta

0

Hai provato a dividere l'atterraggio e le istruzioni di ricerca in 2?

Inoltre si dovrebbe aggiungere l'etichetta per il testo parola (forormance)

Esempio:

MATCH (anchor) 
WHERE id(anchor) = 3275 
WITH anchor 
MATCH (anchor)-[:LEMMA_TEXT*32]->(word) 
RETURN word 

Si ottiene lo stesso errore?

2

Se qualcosa si interrompe al numero 33, significa che c'era una restrizione fino a 32, perché 32? 2^5.

Non è banale che la maggior parte delle restrizioni sono in un fattore di 2, MongoDB dimensioni del documento non può essere più di 16 MB, su una collezione ci potrebbe essere indice di massima, non più di 64. ecc

perché funziona come 32 e poi dopo, perché fino a 32 può raggiungere in un'unica operazione e per l'ultima può vedere la successiva come un'altra operazione. Ma non può andare per 33 in una sola operazione.

La maggior parte di queste restrizioni è fondamentalmente un controllo di sanità mentale e non un limite tecnico.

Per quanto riguarda il motivo per cui è quasi sempre un fattore 2, voglio che qualcun altro risponda o, in altre parole, non lo so.

Problemi correlati