Я только что обнаружил, что вам не нужно добавлять узел в индекс, как описано выше, по крайней мере, не для Neo4j 2.1.2 и Neo4j Spatial 0.13-neo4j-2.1.2.
После создания узла добавьте свойство, которое задает свойство «id» пользователя в значение идентификатора узла Neo4j. Теперь зашифрованный пространственный запрос будет работать. Итак, если вы добавите команду шифра
start n=node(4) n.id = id(n)
запрос будет работать.
Очевидно, что существуют и другие способы формирования оператора Cypher. На самом деле все это можно сделать в несколько объемных шагов. Вы можете добавить все свои узлы в граф RTree (используя REST, Java, массовый загрузчик файлов shp и т. д.), создать самореферентные свойства пользователя «id» на каждом узле, а затем создать пространственный индекс (вторая команда REST в вопросе сообщение).
Проблема, которую вы видите, возникает из-за разрыва связи между процессом REST addNodeToLayer и процессом Cypher «добавить узел в индекс». Процесс Cypher создает второй узел, который содержит только свойства геометрии (широта/долгота, wkt и т. д.) из исходного узла, и добавляет этот узел в граф RTree. Этот узел имеет пользовательское свойство с именем «id», которое имеет значение идентификатора узла Neo4j исходного узла. Процесс REST (или Java) addNodeToLayer напрямую добавляет исходный узел в граф RTree и не создает копию. Он также не устанавливает пользовательское свойство с именем «id» на узле.
Если вы добавили узел в граф RTree с помощью метода Cypher, вы обнаружите, что узел, возвращенный вам запросом REST, является узлом копии, а не исходным. Когда вы выполняете тот же запрос, используя метод Cypher, вы получаете исходный узел. Базовый код в запросе Cypher возвращает исходный узел, используя свойство «id» пользователя в узле копии, найденном запросом, чтобы получить исходный узел. Когда узел, первоначально найденный запросом Cypher, не содержит свойства id, которое может быть разыменовано, запрос Cypher автоматически терпит неудачу, и вы получаете 0 результатов.
Добавляя самореферентное свойство id к каждому узлу данных в графе RTree, запрос Cypher может успешно найти возвращаемый узел.
Использование метода REST, описанного в предыдущем ответе, работает, но в итоге стоимость хранения геометрии удваивается, поскольку создается копия информации о геометрии, хранящейся на исходном узле. При использовании этого метода результаты, возвращаемые запросами Cypher и REST, также отличаются друг от друга. Использование описанного метода экономит место и унифицирует поведение запросов Cypher и REST.
person
Jim Biard
schedule
11.07.2014