2013-08-01 45 views
0

我按照教程http://neo4j.github.io/spatial/#rest-api-add-a-node-to-the-spatial-index来测试Spatial 0.12与Neo4j 2.0M03。我正在尝试SimplePointLayer示例,以获取半径内的节点。Neo4j 2.0M3空间0.12 - 空间不会为我的查询返回任何结果

虽然它看起来像所有东西都被创建(层,索引等),并且我的域节点索引正确,我的Cypher查询或我的Java空间查询代码不会返回任何结果。

当我尝试Neo4j 1.9和Spatial 0.11完全相同的东西时,它工作得很好。

在深入研究这个问题之前,如果这是一个已知问题,我想问问Neo4j社区。提前致谢。

{ 
    "layer" : "geom", 
    "lat" : "lat", 
    "lon" : "lon" 
} 

curl -H "Content-Type: application/json" -X POST -d @geo_layer.json http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer 

geo_index.json:

{ 
    "name" : "geom", 
    "config" : { 
      "provider" : "spatial", 
      "geometry_type" : "point", 
      "lat" : "lat", 
      "lon":"lon" 
      } 
} 

curl -H "Content-Type: application/json" -X POST -d @geo_index.json http://localhost:7474/db/data/index/node 

geo_node.json:

{ 
    "lat" : 60.1, 
    "lon" : 15.2 
} 

curl -H "Content-Type: application/json" -X POST -d @geo_node.json http://localhost:7474/db/data/node 

-

geo_layer.json - 基于彼得的评论测试步骤

新节点的ID是 - 我从一个空的图开始。

domain_node.json:

{ 
    "value": "dummy", 
    "key": "dummy", 
    "uri": "http://localhost:7474/db/data/node/5" 
} 

curl -H "Content-Type: application/json" -X POST -d @domain_node.json http://localhost:7474/db/data/index/node/geom 

cypher_query.json:

{ 
    "query": "start node = node:geom('withinDistance:[60.0,15.0, 100.0]') return node;" 
} 

curl -H "Content-Type: application/json" -X POST -d @cypher_query.json http://localhost:7474/db/data/cypher 

其结果是:

{ 
    "message" : "org.neo4j.gis.spatial.indexprovider.GeoPipeFlowHits.iterator()Lorg/neo4j/graphdb/ResourceIterator;", 
    "exception" : "AbstractMethodError", 
    "fullname" : "java.lang.AbstractMethodError", 
    "stacktrace" : [ "org.neo4j.cypher.internal.spi.gdsimpl.TransactionBoundQueryContext$NodeOperations.indexQuery(TransactionBoundQueryContext.scala:120)", "org.neo4j.cypher.internal.spi.DelegatingOperations.indexQuery(DelegatingQueryContext.scala:107)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anonfun$2$$anonfun$applyOrElse$2.apply(EntityProducerFactory.scala:70)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anonfun$2$$anonfun$applyOrElse$2.apply(EntityProducerFactory.scala:68)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anon$1.apply(EntityProducerFactory.scala:38)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anon$1.apply(EntityProducerFactory.scala:37)", "org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:34)", "org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:33)", "scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)", "org.neo4j.cypher.internal.ClosingIterator$$anonfun$hasNext$1.apply$mcZ$sp(ClosingIterator.scala:36)", "org.neo4j.cypher.internal.ClosingIterator$$anonfun$hasNext$1.apply(ClosingIterator.scala:35)", "org.neo4j.cypher.internal.ClosingIterator$$anonfun$hasNext$1.apply(ClosingIterator.scala:35)", "org.neo4j.cypher.internal.ClosingIterator.failIfThrows(ClosingIterator.scala:84)", "org.neo4j.cypher.internal.ClosingIterator.hasNext(ClosingIterator.scala:35)", "org.neo4j.cypher.PipeExecutionResult.hasNext(PipeExecutionResult.scala:157)", "scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)", "scala.collection.convert.Wrappers$IteratorWrapper.hasNext(Wrappers.scala:29)", "org.neo4j.cypher.PipeExecutionResult$$anon$1.hasNext(PipeExecutionResult.scala:73)", "org.neo4j.helpers.collection.ExceptionHandlingIterable$1.hasNext(ExceptionHandlingIterable.java:58)", "org.neo4j.helpers.collection.IteratorWrapper.hasNext(IteratorWrapper.java:42)", "org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:58)", "org.neo4j.server.rest.repr.Serializer.serialize(Serializer.java:75)", "org.neo4j.server.rest.repr.MappingSerializer.putList(MappingSerializer.java:61)", "org.neo4j.server.rest.repr.CypherResultRepresentation.serialize(CypherResultRepresentation.java:83)", "org.neo4j.server.rest.repr.MappingRepresentation.serialize(MappingRepresentation.java:42)", "org.neo4j.server.rest.repr.OutputFormat.assemble(OutputFormat.java:185)", "org.neo4j.server.rest.repr.OutputFormat.formatRepresentation(OutputFormat.java:133)", "org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.java:119)", "org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:57)", "org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:96)", "java.lang.reflect.Method.invoke(Method.java:601)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ] 

- 可选地 -

location.json:

{ 
    "layer" : "geom", 
    "node" : "http://localhost:7474/db/data/node/5" 
} 

curl -H "Content-Type: application/json" -X POST -d @location.json http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer 

geo_query.json:

{ 
    "layer" : "geom", 
    "distanceInKm" : "100", 
    "pointX" : "15", 
    "pointY" : "60" 
} 

curl -H "Content-Type: application/json" -X POST -d @geo_query.json http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance 

返回结果为空。

回答

0

确保您通过暗号查询它之前,将节点添加到索引,因为这会在DB必要structurs,看到https://github.com/neo4j/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/SpatialPluginFunctionalTest.java#L268

+0

感谢您的答复彼得。我列出了一个模拟您建议我查看的单元测试的新测试结果。不知道我得到的错误意味着什么。我从github克隆了最新的Spatial代码并用于此测试。我的Neo4j版本是2.0M3,我从网站上下载 - 我还没有建立自己的自我。我不知道这是否意味着什么,但是当我按照上述步骤操作时,我看到两个索引创建为结果。第一个是“geom__neo4j-spatial__LayerNodeIndex__internal__spatialNodeLookup__”,第二个是“geom”。任何想法? – BmRb

+0

最后一个注释。当我在1.9.1上进行同样的测试时,它就像一个魅力。 – BmRb