【问题标题】:Failed to add a node to spatial layer with https post request in Neo4j php无法在 Neo4j php 中使用 https 发布请求将节点添加到空间层
【发布时间】:2015-06-10 08:09:00
【问题描述】:

我正在尝试向索引空间添加一个节点。

 $path = '/db/data/index/node/'.$layer;
    $nodePath = DbConfig::getFullDatabaseServerUrl() . '/db/data/node/' . $nodeId;
    $data = array("key" => "dummy", "value" => "dummy","uri"=>$nodePath);
    $data =json_encode($data);
    DbRestManager::send($path,$data);


public  static function send($path, $data) {
        $url = DbConfig::getFullDatabaseServerUrl() . $path;
        $auth=DbConfig::getUserName().':'.DbConfig::getPassword();
        $authEcoded=base64_encode($auth);

        $headers = array('Accept: application/json; charset=UTF-8','Authorization: Basic '.$authEcoded,'Content-Type: application/json');

        // Open connection
        $ch = curl_init();

        // Set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        // Execute post
        $result = curl_exec($ch);

        // Close connection
        curl_close($ch);

    }

$data={"key":"dummy","value":"dummy","uri":"dev_db.pico-app.com:7473/db/data/node/11"}

一切似乎都很好,但操作不起作用。由于某种原因,我也看不到错误。

【问题讨论】:

    标签: php curl neo4j http-post


    【解决方案1】:

    spatial server documentation 开始,将节点添加到索引有一个完全不同的 json 有效负载要发送,并发送到不同的端点。

    您必须首先创建一个空间层,然后创建一个空间索引,然后只将您的节点添加到空间索引中。

    Example request
    
    POST http://localhost:7575/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer
    
    Accept: application/json; charset=UTF-8
    
    Content-Type: application/json
    
    {
      "layer" : "geom",
      "node" : "http://localhost:7575/db/data/node/54"
    }
    

    您可能希望使用neoclientspatial extension 而不是在raw 中使用curl,这将消除您所有http 请求的负担并提供有用的方法,一个简单的例子:

    <?php
    
    require_once(__DIR__.'/vendor/autoload.php');
    
    use Neoxygen\NeoClient\ClientBuilder;
    
    $client = ClientBuilder::create()
        ->addConnection('default', 'https', 'localhost', 7474, true, 'neo4j', 'password')
        ->setAutoFormatResponse(true)
        ->registerExtension('spatial', 'Neoxygen\\NeoClientExtension\\Spatial\\SpatialExtension')
        ->build();
    
    
    $client->createSpatialIndex();
    $client->createSimplePointLayer();
    // Create first some nodes with lat and lon values
    // Retrieve them and add them to the spatial index
    $q = $client->sendCypherQuery('MATCH (n:Step) RETURN n');
    $steps = $q->getResult()->getNodes();
    foreach ($steps as $step) {
        $client->addNodeToSpatialIndex($step->getId());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多