2015-05-27 13 views
45

Ich benutze Neo4J, um Texte darzustellen; Im einfachsten Fall ist ein Text eine Folge von Wörtern, die durch die Beziehung LEMMA_TEXT verbunden sind.Warum sagt Neo4J mir, dass es keinen Löffel gibt?

Ich versuche das N-te Wort nach einem bekannten Wort zu finden, mit einer Abfrage, die ungefähr so ​​aussieht.

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

In einem bestimmten Fall, wenn ich die Pfadlänge auf 33 erhöhen, bekomme ich diesen Fehler:

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

Und doch ist die folgende Abfrage gibt das richtige Ergebnis.

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

was zeigt, dass der Knoten, den ich will, existiert und erreichbar ist.

Wo ist der Abschnitt des Handbuchs, der mir sagt, wie man den Löffel mit meinem Kopf verbiegt? Noch wichtiger, was bedeutet das eigentlich ?!

+0

Können Sie Ihre Datenbank für Tests mit uns teilen? –

+0

Welche Version von Neo4j verwendest du, kannst du die neueste Version 2.2.2 ausprobieren? –

+0

Danke für die Antwort! Ich bekomme immer noch einen Fehler unter 2.2.2: 'Neo.DatabaseError.Statement.ExecutionFailure: Unerwarteterweise versucht, Kardinalität einer [* 0..0] Beziehung zu berechnen ' Ich kann eine Kopie der DB zur Verfügung stellen, wenn Sie brauchen es - lassen Sie mich wissen, wo Sie einen Link senden können. – tla

Antwort

0

Haben Sie versucht, die Landung und die Suchanweisungen in 2 zu teilen?

Und Sie sollten das Label für den Text Wort (forormance)

Beispiel hinzufügen:

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

Sie erhalten den gleichen Fehler?

2

Wenn irgendetwas bei der Zahl 33 bricht, bedeutet das, dass es eine Beschränkung bis 32 gab, warum 32? 2^5.

Es ist nicht trivial, dass die meisten der Beschränkungen sind in dem Faktor 2, MongoDB Dokumentgröße nicht mehr als 16 MB sein, auf einer Sammlung könnte es maximal Index, nicht mehr als 64 usw.

warum es funktioniert als 32 und dann als nächstes, denn bis 32 kann es in einer Operation erreichen und für die letzte kann es die nächste als eine andere Operation sehen. Aber es kann nicht 33 in einem Vorgang gehen.

Die meisten dieser Einschränkungen sind im Grunde Vernunftprüfung obwohl und nicht wirklich technische Grenze.

Warum ist es fast immer ein Faktor von 2, ich möchte jemand anderen zu beantworten, oder mit anderen Worten, ich weiß es nicht.

Verwandte Themen