Я пытаюсь создать пространственную базу данных с neo4j 3.0.2 и neo4j-spaces для 3.0.2. Я установил плагин, и я проверил, что плагин работает с cURL curl -v http://neo4j:neo4j@localhost:7474/db/data/
который выводит следующее:
{ "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.
Что я делаю не так? Я проверил множество форумов и т. Д., Но ответ всегда, кажется, заключается в установке пространственного плагина, который у меня есть, и, похоже, он работает в соответствии с первым выходом.
РЕДАКТИРОВАТЬ 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 (например, в веб-консоли)?
Любая помощь будет оценена! ура