Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新至:将节点添加到Neo4j空间索引_Neo4j_Cypher - Fatal编程技术网

更新至:将节点添加到Neo4j空间索引

更新至:将节点添加到Neo4j空间索引,neo4j,cypher,Neo4j,Cypher,我希望有人能提供一些关于向Spatial中添加节点的最新说明。我能找到的最好的说明是: 然而,它已经有将近2年的历史了,并且有一些与公认的bug()相矛盾的信息,这个bug似乎仍然是开放的 我还发现了本教程: 这意味着我们应该将节点添加到层中,并将Neo4j ID#作为属性插入到节点中,而不是将节点插入到geom索引中 我在这里的首要任务是能够通过Cypher(在浏览器中)进行查询,但我们最终也希望能够通过REST进行查询。因此,理想情况下,我希望以这样一种方式插入节点,我们可以同时执行这两

我希望有人能提供一些关于向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调用创建空间索引:

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端点。你能澄清一下吗?我是否只需要添加到图层而不需要添加空间索引?还是索引而不是图层?或者两者都有?如果两者都有,顺序是什么(如果顺序很重要)?afaik
addNodeToLayer
也会隐式地将其添加到索引中。我尝试了所描述的操作序列,最后返回了密码查询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" : {}
  } 
  ]
}