Как создать пространственный индекс в neo4j, используя только шифр?

Я хочу поиграть с neo4j и пространственными индексами. Я не могу найти документацию, демонстрирующую, как это сделать с помощью шифра, только через REST API.

Возможно ли создавать пространственные индексы через Cypher, скажем, в веб-консоли neo4j?


person Dr Joe    schedule 25.10.2014    source источник


Ответы (1)


В настоящее время нет возможности создать пространственный индекс с помощью Cypher. Вы можете использовать API Java или вызов REST, см. документацию по адресу http://neo4j-contrib.github.io/spatial/#rest-api-create-a-spatial-index для получения подробной информации. Поскольку браузер Neo4j позволяет отправлять HTTP POST, вы можете ввести там:

:POST /db/data/index/node {"name":"geom", "config": 
  {"provider":"spatial", "geometry_type":"point", "lat":"lat", "lon":"lon"}
}

В качестве альтернативы вы можете использовать команду index в neo4j-shell.

Обновление для Neo4j 3.0

Neo4j Spatial для 3.0 предоставляет хранимые процедуры для управления пространственным индексом, поэтому все можно сделать с помощью шифрования. См. https://github.com/neo4j-contrib/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/procedures/SpatialProcedures.java. Примечание: эта версия еще не выпущена, поэтому вам придется собирать ее из исходного кода самостоятельно.

person Stefan Armbruster    schedule 25.10.2014
comment
Индексирует ли это все узлы, у которых есть свойства lon и lat, или мне нужно что-то сделать, чтобы применить его только к :PostCode. (Извините! Вопросы новичка!) - person Dr Joe; 26.10.2014
comment
Пространственные индексы создаются вручную, поэтому вам необходимо вручную добавлять узлы в индекс. Для этого существует вызов REST, см. neo4j.com/docs/stable/ - person Stefan Armbruster; 26.10.2014
comment
У меня возникли проблемы с созданием пространственного индекса с использованием java API, поддерживаемого подключением к базе данных REST stackoverflow.com/questions/26602540 - person Dr Joe; 28.10.2014
comment
Никакого скраба. Все в порядке :) Я могу создать индекс поверх REST именно так, как вы предлагаете: graphDb.index().forNodes( "points", ["provider": "spatial", "geometry_type": "point", "lat": "lat", "lon":"lon"]) - person Dr Joe; 28.10.2014