使用withinDistance的Neo4j / Cypher查询返回0行

时间:2014-08-21 15:51:50

标签: neo4j cypher spring-data-neo4j spatial-query neo4j-spatial

我刚刚在我的服务器上设置了Neo4j Spatial插件,并且我使用SDN 3.1.2来创建我的wkt索引:

@Indexed(indexName = "CarsLocation", indexType = IndexType.POINT) var wkt: String

整个工作很棒,我可以像这样使用HTTP控制台进行涉及withinDistance的查询,返回匹配的节点:

POST /db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance {"layer":"CarsLocation","pointX":48.892501,"pointY":2.373140,"distanceInKm":100.0}

但是,我想使用Cypher这样查询:

start n = node:CarsLocation("withinDistance:[48.892501,2.373140,100.0]") return n

它只返回0行,无论值是什么。

我遇到this帖子,建议手动将Car节点添加到空间索引:CarsLocation。

所以我执行了这个命令:

POST /db/data/index/node/CarsLocation {"value":"dummy","key":"dummy", "uri":"http://localhost:7474/db/data/node/30"}  //30 being the Car node I want to index

但它也没有使密码查询起作用。

我也尝试通过http调用执行Cypher:

POST /db/data/cypher {"query" : "start n = node:CarsLocation({indexQuery}) return n", "params": {"indexQuery": "withinDistance:[48.892067, 2.373140, 10.0]"}}

也不起作用。

然而,当我指定大量的公里数(IMO超过极限)时,这个通过:

start n = node:CarsLocation("withinDistance:[48.892501,2.373140,10000.0]") return n

(返回我的Car节点30)。

我是否错过了重要的事情?

我不知道哪里可能是错误,阻止Cypher查询工作。

我指出我正在使用Neo4j 2.1.2。

1 个答案:

答案 0 :(得分:1)

Mik378,

这里的问题非常简单。 ' withinDistance' Cypher空间索引查询有一个怪癖(就我而言,这是一个错误)。您必须先指定纬度,然后指定经度。我不熟悉SDN,因此我不知道您是否还需要执行显式空间索引创建命令。

恩典与和平,

吉姆