更新至:将节点添加到Neo4j空间索引
我希望有人能提供一些关于向Spatial中添加节点的最新说明。我能找到的最好的说明是: 然而,它已经有将近2年的历史了,并且有一些与公认的bug()相矛盾的信息,这个bug似乎仍然是开放的 我还发现了本教程: 这意味着我们应该将节点添加到层中,并将Neo4j ID#作为属性插入到节点中,而不是将节点插入到geom索引中 我在这里的首要任务是能够通过Cypher(在浏览器中)进行查询,但我们最终也希望能够通过REST进行查询。因此,理想情况下,我希望以这样一种方式插入节点,我们可以同时执行这两种操作 因此,我的问题是: 1) 这里允许通过REST和Cypher进行查询的正确步骤是什么 2) 如果我调用/addSimplePointLayer,然后调用/index/node来添加空间索引(通过cURL或REST),我可以使用LOAD CSV来插入节点,并能够通过REST和Cypher查询空间插件吗 3) 如果我使用REST插入节点,我需要进行哪些调用(以及以何种顺序),以确保我可以通过REST和Cypher(web浏览器)进行查询 谢谢,我期待着把这一切都解决 问题1 首先需要初始化一个层,并使用REST调用创建空间索引:更新至:将节点添加到Neo4j空间索引,neo4j,cypher,Neo4j,Cypher,我希望有人能提供一些关于向Spatial中添加节点的最新说明。我能找到的最好的说明是: 然而,它已经有将近2年的历史了,并且有一些与公认的bug()相矛盾的信息,这个bug似乎仍然是开放的 我还发现了本教程: 这意味着我们应该将节点添加到层中,并将Neo4j ID#作为属性插入到节点中,而不是将节点插入到geom索引中 我在这里的首要任务是能够通过Cypher(在浏览器中)进行查询,但我们最终也希望能够通过REST进行查询。因此,理想情况下,我希望以这样一种方式插入节点,我们可以同时执行这两
POST /db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer HTTP/1.1
Host: localhost:7474
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
{
"layer" : "geom",
"lat" : "lat",
"lon" : "lon"
}
以及:
通过事务端点使用Cypher创建具有lon/lat属性的节点:
POST /db/data/transaction/commit HTTP/1.1
Host: localhost:7474
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
{
"statements" : [
{
"statement" : "create (city:City {data}) return id(city)",
"parameters" : {
"data" : {
"name" : "MyTown",
"lon": 15.2,
"lat": 60.1
}
}
}
]
}
并将其添加到空间索引中-确保采用节点id和从上一个请求返回的节点id:
POST /db/data/ext/SpatialPlugin/graphdb/addNodeToLayer HTTP/1.1
Host: localhost:7474
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
{
"layer": "geom",
"node": "http://localhost:7474/db/data/node/<my_nodeid_goes_here>"
}
有了它,您可以使用Cypher进行地理查询,例如:
POST /db/data/transaction/commit HTTP/1.1
Host: localhost:7474
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
{
"statements" : [
{
"statement" : "start city = node:geom('withinDistance:[60.1,15.2, 100.0]') return city",
"parameters" : {}
}
]
}
注意:对于有间隔的,必须指定lat
,lon
,distanceInKm
问题2
如上所述,您需要有一个单独的REST调用来向空间索引添加节点。这是目前不可能与Cypher直接。作为一种解决方法,请使用加载CSV
创建具有lon/lat属性的节点。在预处理步骤中,运行类似于MATCH(n:City)的语句,其中nothas(n.id)将n.id=id(n)返回id(n)作为id
。这将设置id属性(上面描述的hack)并返回新节点的id列表。对于每个节点,发出REST调用以将节点添加到地理索引
问题3
以上已回答:-)你好,Stefan,感谢您提供的信息以及持续的帮助和支持!您参考了上面的“向空间索引添加节点”,但您只引用了addNodeToLayer端点,而我没有看到/db/data/index/node/geom端点。你能澄清一下吗?我是否只需要添加到图层而不需要添加空间索引?还是索引而不是图层?或者两者都有?如果两者都有,顺序是什么(如果顺序很重要)?afaikaddNodeToLayer
也会隐式地将其添加到索引中。我尝试了所描述的操作序列,最后返回了密码查询results@StefanArmbruster斯特凡,如何将所有节点添加到该层?请调用/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer
查找所有要添加的节点,因为我希望尽可能使用Cypher,所以我已经使用了/db/data/transaction/commit
。您也可以使用/db/data/node
端点-您的选择。
POST /db/data/transaction/commit HTTP/1.1
Host: localhost:7474
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
{
"statements" : [
{ "statement" : "match (n:City) set n.id=id(n)" }
]
}
POST /db/data/transaction/commit HTTP/1.1
Host: localhost:7474
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
{
"statements" : [
{
"statement" : "start city = node:geom('withinDistance:[60.1,15.2, 100.0]') return city",
"parameters" : {}
}
]
}