2016-06-09 10 views
3

Ich weiß, dass das Plugin richtig geladen wird, als andere Methoden funktionieren wie spatial.procedures und spatial.addNode usw.Neo4j räumliche Server-Plugin nicht auf withinDistance und am nächsten java.lang.NoClassDefFoundError

Der Fehler führt nach ein Aufruf wie folgt:

CALL spatial.withinDistance('profile_geo', [43.524, 96.7341], 500) 

und der Fehler, der sich ergibt, ist dies:

Failed to invoke procedure `spatial.withinDistance`: Caused by: java.lang.NoClassDefFoundError: org/neo4j/cypher/internal/compiler/v3_0/commands/expressions/GeographicPoint 

der gleiche Fehler erscheint beim Versuch, die nächste Funktion als wel zu verwenden l. Jede Hilfe wäre willkommen.

+0

In welcher Version von Neo4j Spatial läuft welche Version von Neo4j? –

+0

neo4j-community-3.0.2 und neo4j-spatial-0.17-neo4j-3.0.2-server-plugin.jar – kamranjon

+0

Ich habe das gleiche Problem bei der Verwendung von CYPHER und habe versucht neo4j-spatial v0.16 und v0.17 (Referenz: http://stackoverflow.com/questions/37837663/neo4j-spatial-3-0-2-no-index-provider-spatial-found ersten Kommentar unter der Antwort von @Michael Hunger). Wenn Sie den REST-Pfad verwenden, funktioniert es: "/ db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance". Gibt es hierzu Neuigkeiten? – Joran

Antwort

0

Es scheint, dass Sie erforderliche Jar für GeographicalPoint Klasse fehlt. Bitte stellen Sie sicher, dass Sie diese Klasse in Ihren Gläsern haben. Ich weiß, dass diese Klasse in neo4j-cypher-compiler-3.0-3.0.3.jar existiert, aber es wird nicht für Sie arbeiten, da es in anderen Namespaces residiert. Wenn Sie das entsprechende Jar in Ihrer Umgebung nicht finden können, werfen Sie bitte einen Blick auf das Maven Repository und versuchen Sie es dort zu finden.

+2

Das Server-Plugin ist eine vorkompilierte Erweiterung, sollte diese Klasse nicht schon in der Erweiterung kompiliert sein? – kamranjon

0

kurze Antwort: Upgrade auf 3.0.3 (beide Neo4j und Plugin)

lange Antwort:

Ich lief in die exakt gleiche Problem heute. Ich wurde mit Version 3.0.2 mit Server-Plugin-Version 3.0.2 und lief die Chiffre-Abfrage:

CALL spatial.withinDistance("spatial_records",{lon:20.0,lat:50.0},100000000) 

Joran in den Kommentaren oben erwähnt, dass der REST-API eine funktionierende Alternative. Also habe ich das ausprobiert und festgestellt, dass er wirklich korrekt ist.

Getestet habe ich dies mit httpie, mit dem folgenden Befehl:

cat tmp.json | http :7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance 

wo tmp.json wie folgt aussieht:

{"layer" : "spatial_records","pointX" :3.9706,"pointY" : 46.7907,"distanceInKm" :10000000000} 

Während dies funktioniert, wäre schön, mit CYPHER mit gespeicherten Prozeduren. So bei einer weiteren Untersuchung, bemerkte ich, dass eine kürzlich commit folgende Änderungen enthalten:

-  <neo4j.version>3.0.1</neo4j.version> 
+  <neo4j.version>3.0.3</neo4j.version> 

... 

-import org.neo4j.cypher.internal.compiler.v3_0.commands.expressions.GeographicPoint; 
+import org.neo4j.cypher.internal.compiler.v3_0.GeographicPoint; 

So landete ich Version 3.0.3 sowohl Neo4j das Herunterladen und die räumliche Plugin. Was auch immer das Problem war, scheint in dieser Version behoben zu sein. Der Aufruf der gespeicherten Prozedur funktioniert jetzt wie erwartet!