2016-06-15 4 views
2

Я пытаюсь создать пространственную базу данных с neo4j 3.0.2 и neo4j-spaces для 3.0.2. Я установил плагин и я проверил, что плагин работает с Curl curl -v http://neo4j:[email protected]:7474/db/data/ который выводит следующее:Neo4j Spatial 3.0.2: не найден провайдер индекса «пространственный»

{ 
    "extensions" : { 
    "SpatialPlugin" : { 
     "addSimplePointLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer", 
     "addNodesToLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodesToLayer", 
     "findClosestGeometries" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findClosestGeometries", 
     "addGeometryWKTToLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addGeometryWKTToLayer", 
     "findGeometriesWithinDistance" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance", 
     "addEditableLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addEditableLayer", 
     "addCQLDynamicLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addCQLDynamicLayer", 
     "addNodeToLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer", 
     "getLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/getLayer", 
     "findGeometriesInBBox" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesInBBox", 
     "updateGeometryFromWKT" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/updateGeometryFromWKT", 
     "findGeometriesIntersectingBBox" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesIntersectingBBox" 
    } 
    }, 
    "node" : "http://localhost:7474/db/data/node", 
    "relationship" : "http://localhost:7474/db/data/relationship", 
    "node_index" : "http://localhost:7474/db/data/index/node", 
    "relationship_index" : "http://localhost:7474/db/data/index/relationship", 
    "extensions_info" : "http://localhost:7474/db/data/ext", 
    "relationship_types" : "http://localhost:7474/db/data/relationship/types", 
    "batch" : "http://localhost:7474/db/data/batch", 
    "cypher" : "http://localhost:7474/db/data/cypher", 
    "indexes" : "http://localhost:7474/db/data/schema/index", 
    "constraints" : "http://localhost:7474/db/data/schema/constraint", 
    "transaction" : "http://localhost:7474/db/data/transaction", 
    "node_labels" : "http://localhost:7474/db/data/labels", 
    "neo4j_version" : "3.0.2" 
* Connection #0 to host localhost left intact 
}* Closing connection #0 

Теперь я могу создать новый simplePointLayer:

// define entity manager 
$client = $this->get('neo4j.spatial_manager')->getClient(); 



// 1. Create a pointlayer 
$request = $client->request('POST', 
    '/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer', 
    [ 
     'json' => [ 
      'layer' => 'geom', 
      'lat' => 'lat', 
      'lon' => 'lon', 
     ], 
    ] 
); 

var_dump($request); 

Это создает пространственный корневой узел с rTree. Но когда я теперь хочу создать пространственный индекс со следующим:

// 2. Create a spatial index 
$request = $client->request('POST', 
    '/db/data/index/node/', 
    [ 
     'json' => [ 
      'name' => 'geom', 
      'config' => [ 
       'provider' => 'spatial', 
       'geometry_type' => 'point', 
       'lat' => 'lat', 
       'lon' => 'lon', 
      ], 
     ], 
    ] 
); 

var_dump($request); 

Я столкнулся с ошибкой-сообщение:

"message" : "No index provider 'spatial' found. 

Что я делаю неправильно? Я проверил множество форумов и т. Д., Но ответ всегда, кажется, заключается в установке пространственного плагина, который у меня есть, и, похоже, он работает в соответствии с первым выходом.

EDIT 15.06.2016

Что странно, что я могу добавить узлы к rTree:

// Create a node with spatial data 
    $json = [ 
     'team' => 'REDBLUE', 
     'name' => 'TEST', 
     'lat' => 25.121075, 
     'lon' => 89.990630, 
    ]; 
    $response = $client->request('POST', 
     '/db/data/node', 
     [ 
      'json' => $json 
     ] 
    ); 

    $node = json_decode($response->getBody(), true)['self']; 

    // Add the node to the layer 
    $response = $client->request('POST', 
     '/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer', 
     [ 
      'json' => [ 
       'layer' => 'geom', 
       'node' => $node, 
      ], 
     ] 
    ); 

    $data = json_decode($response->getBody(), true); 

    var_dump($data); 

И я могу запросить узлы через REST:

$request = $client->request('POST', 
     '/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance', 
     [ 
      'json' => [ 
       'layer' => 'geom', 
       'pointX' => 89.99506, 
       'pointY' => 25.121260, 
       'distanceInKm' => 10, 
      ], 
     ] 
    ); 

$data = json_decode($request->getBody(), true); 

var_dump($data); 

Но почему это не позволяет мне создать индекс? Или он автоматически выполняет индексирование? И если да, то как я могу запросить использование CYPHER (например, в веб-консоли)?

Любая помощь будет оценена! Cheers

ответ

1

Поставщик индекса был удален (тогда он был единственным средством обеспечения интеграции с Cypher), в пользу пользовательских процедур для Spatial.

см: https://github.com/neo4j-contrib/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/procedures/SpatialProceduresTest.java#L113

Поскольку это новый выпуск (на 3.0), мы сочли разумным, чтобы удалить поставщика индекса.

+1

Спасибо за эту важную информацию! Итак, как именно я выполняю пространственные запросы с помощью Cypher? Если я попробую 'CALL spaces.withinDistance ('geom', {pointX: 89.99506, pointY: 25.121260}, 100)' Я получаю ошибку: 'Не удалось вызвать процедуру' space.withinDistance': вызвано: java.lang.NoClassDefFoundError : org/neo4j/cypher/internal/compiler/v3_0/commands/expressions/GeographicPoint' – Joran

+1

Такая же ошибка возникает при создании всего с помощью команд вызова с использованием значений по умолчанию: 'CALL spaces.addPointLayer ('geom')' then ' create (n: Tile {name: ''test', широта: 47.99, longitude: 7.886})' и, наконец, 'match (t: Tile) с t вызовом: array.addNode ('geom', t) YIELD node return count (*) '. Если я затем запрошу использование: 'CALL spaces.withinDistance ('geom', {широта: 47.60, долгота: 7.7}, 100)' появляется та же ошибка. – Joran

 Смежные вопросы

  • Нет связанных вопросов^_^