2016-07-06 7 views
0

Я видел несколько сообщений здесь, в стеке, которые показывают, как создать простойPointLayer. Однако этот процесс терпит неудачу для меня. Я использую версию Neo4J 3.0.2 и пространственный плагин версии 3.0.2.Как создать SimplePointLayer в пространстве Neo4J?

Я был here, here и here.

Каждая из этих страниц содержит тот же набор инструкций для создания SimplePointLayer, как показано ниже.

Этот шаг прекрасно работает для меня:

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" 
} 

Я не знаю, где, чтобы увидеть список слоев, но ответ 200, поэтому я предполагаю, что все работает, как ожидалось здесь.

Следующий шаг, где я застрял:

POST /db/data/index/node/ HTTP/1.1 
Host: localhost:7474 
Accept: application/json 
Content-Type: application/json 
Cache-Control: no-cache 

{ 
    "name" : "geom", 
    "config" : { 
     "provider" : "spatial", 
     "geometry_type" : "point", 
     "lat" : "lat", 
     "lon" : "lon" 
    } 
} 

У меня есть выше JSON в файле tmp.json и я бегу

cat tmp.json | http :7474/db/data/index/node 

Это приводит следующее сообщение:

HTTP/1.1 400 Bad Request 
Access-Control-Allow-Origin: * 
Content-Length: 6887 
Content-Type: application/json; charset=UTF-8 
Date: Wed, 06 Jul 2016 18:14:18 GMT 
Server: Jetty(9.2.9.v20150224) 

{ 
    "errors": [ 
     { 
      "code": "Neo.DatabaseError.General.UnknownError", 
      "message": "No index provider 'spatial' found. Maybe the intended provider (or one more of its dependencies) aren't on the classpath or it failed to load.", 
      "stackTrace": "java.lang.IllegalArgumentException: No index provider 'spatial' found. Maybe the intended provider (or one more of its dependencies) aren't on the classpath or it failed to load.\n\tat org.neo4j.kernel.NeoStoreDataSource$1.apply(NeoStoreDataSource.java:386)\n\tat org.neo4j.kernel.NeoStoreDataSource$1.apply(NeoStoreDataSource.java:378)\n\tat org.neo4j.kernel.impl.index.LegacyIndexStore.findIndexConfig(LegacyIndexStore.java:105)\n\tat org.neo4j.kernel.impl.index.LegacyIndexStore.getOrCreateIndexConfig(LegacyIndexStore.java:171)\n\tat org.neo4j.kernel.impl.index.LegacyIndexStore.getOrCreateNodeIndexConfig(LegacyIndexStore.java:64)\n\tat org.neo4j.kernel.impl.api.StateHandlingStatementOperations.nodeLegacyIndexCreateLazily(StateHandlingStatementOperations.java:1475)\n\tat org.neo4j.kernel.impl.api.OperationsFacade.nodeLegacyIndexCreateLazily(OperationsFacade.java:1195)\n\tat org.neo4j.kernel.impl.coreapi.IndexProviderImpl.getOrCreateNodeIndex(IndexProviderImpl.java:52)\n\tat org.neo4j.kernel.impl.coreapi.IndexManagerImpl.forNodes(IndexManagerImpl.java:81)\n\tat org.neo4j.server.rest.web.DatabaseActions.createNodeIndex(DatabaseActions.java:381)\n\tat org.neo4j.server.rest.web.RestfulGraphDatabase.jsonCreateNodeIndex(RestfulGraphDatabase.java:845)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)\n\tat com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)\n\tat com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)\n\tat org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:144)\n\tat com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)\n\tat com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)\n\tat com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)\n\tat com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)\n\tat com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)\n\tat com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)\n\tat com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)\n\tat com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)\n\tat com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)\n\tat com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)\n\tat com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)\n\tat com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)\n\tat org.neo4j.server.rest.web.CollectUserAgentFilter.doFilter(CollectUserAgentFilter.java:69)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\tat org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)\n\tat org.eclipse.jetty.server.Server.handle(Server.java:497)\n\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)\n\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)\n\tat org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)\n\tat java.lang.Thread.run(Thread.java:745)\n" 
     } 
    ], 
    "exception": "IllegalArgumentException", 
    "fullname": "java.lang.IllegalArgumentException", 
    "message": "No index provider 'spatial' found. Maybe the intended provider (or one more of its dependencies) aren't on the classpath or it failed to load.", 
    "stackTrace": [ 
     "org.neo4j.kernel.NeoStoreDataSource$1.apply(NeoStoreDataSource.java:386)", 
     "org.neo4j.kernel.NeoStoreDataSource$1.apply(NeoStoreDataSource.java:378)", 
     "org.neo4j.kernel.impl.index.LegacyIndexStore.findIndexConfig(LegacyIndexStore.java:105)", 
     "org.neo4j.kernel.impl.index.LegacyIndexStore.getOrCreateIndexConfig(LegacyIndexStore.java:171)", 
     "org.neo4j.kernel.impl.index.LegacyIndexStore.getOrCreateNodeIndexConfig(LegacyIndexStore.java:64)", 
     "org.neo4j.kernel.impl.api.StateHandlingStatementOperations.nodeLegacyIndexCreateLazily(StateHandlingStatementOperations.java:1475)", 
     "org.neo4j.kernel.impl.api.OperationsFacade.nodeLegacyIndexCreateLazily(OperationsFacade.java:1195)", 
     "org.neo4j.kernel.impl.coreapi.IndexProviderImpl.getOrCreateNodeIndex(IndexProviderImpl.java:52)", 
     "org.neo4j.kernel.impl.coreapi.IndexManagerImpl.forNodes(IndexManagerImpl.java:81)", 
     "org.neo4j.server.rest.web.DatabaseActions.createNodeIndex(DatabaseActions.java:381)", 
     "org.neo4j.server.rest.web.RestfulGraphDatabase.jsonCreateNodeIndex(RestfulGraphDatabase.java:845)", 
     "java.lang.reflect.Method.invoke(Method.java:498)", 
     "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:144)", 
     "org.neo4j.server.rest.web.CollectUserAgentFilter.doFilter(CollectUserAgentFilter.java:69)", 
     "java.lang.Thread.run(Thread.java:745)" 
    ] 
} 

Я не уверен, куда идти отсюда. Я предполагаю, что «провайдер» - это плагин. Я не человек JAVA, поэтому я не уверен, как бороться с classpaths. Кто-нибудь столкнулся с этой ошибкой, прежде чем \ знать, как справиться с этой проблемой?

ответ

1

Пространственная библиотека в настоящий момент немного изменена с введением пользовательских процедур в Neo4j 3.0. В частности:

  1. процедуры становятся рекомендуемым способом взаимодействовать с пространственной и

  2. провайдер индекс был удален из пространственной библиотеки (вызывая ошибки вы столкнулись)

С помощью процедур у вас теперь есть доступ к пространственной функциональности от Cypher:

Создать слой

CALL spatial.addPointLayer('cities'); 

Добавить все города к слою

MATCH (c:City) 
WITH collect(c) AS cities 
CALL spatial.addNodes('cities',cities) YIELD node 
RETURN count(*) 

Найти города в пределах расстояния

MATCH (c:City {name:"Berlin"}) WITH c 
CALL spatial.distance('cities', c , 200) YIELD node, distance 
RETURN node.name AS name, round(distance) AS dist 

Смотрите this для получения дополнительной информации.

+0

Еще раз спасибо Уильям! С этим, безусловно, намного проще работать. Где можно найти документацию по доступным процедурам? – spanishgum

+0

Существует некоторая информация о процедурах в [readme] (https://github.com/neo4j-contrib/spatial#using-the-neo4j-spatial-server-plugin). [Тестовый класс для пространственных процедур] (https: // github.com/neo4j-contrib/spaces/blob/master/src/test/java/org/neo4j/gis/spaces/procedure/SpatialProceduresTest.java) является хорошим источником для примеров. 'CALL spaces.procedures' будет перечислять все пространственные процедуры. –

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

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