Создание индексированных узлов на шифре neo4j через rest API

Я пытаюсь создать индексированный узел в шифре со следующим синтаксисом:

neo4j-sh (?)$ start m=node:person(UID= "1")  return m;
==> +------------+
==> | m          |
==> +------------+
==> | Node[64]{} |
==> +------------+
==> 1 row
==> 0 ms
==> 
neo4j-sh (?)$ start n = node(64) return n.UID;
==> EntityNotFoundException: The property 'UID' does not exist on Node[64]

Почему кажется, что узел создан, но свойство, которое я создаю и которое кажется успешно возвращенным, не существует?

Есть ли более простой способ? Раньше я использовал функцию py2neo:

neo4j.GraphDatabaseService("http://localhost:7474/db/data/").get_or_create_indexed_node(index='person', key='UID', value=self.id, properties={'UID' : self.id})

Но это, похоже, устарело — оно больше не работает с последней версией py2neo, которая больше не поддерживает аргумент properties (и для будущих людей index заменено на index_name).


person Mittenchops    schedule 18.04.2013    source источник


Ответы (2)


Индекс и свойство - разные вещи.

Кажется, у вас есть узел в вашем графе с индексом с именем person и UID пары ключ/значение: "1". Ваш первый запрос получает ваш узел по его индексу. Но индекс не является свойством узла. Вы можете запустить webadmin, чтобы визуализировать, как индексы управляются на вашем графике.

Насколько я знаю, в документации нет ничего о том, как создавать индексы с помощью шифра, но вы можете легко использовать REST API для управления ими (ссылка).

person MrDosu    schedule 18.04.2013
comment
Разве это не показательное лицо, указанное start n node:/person/? Свойства определены в скобках после. Py2neo использует REST API для создания индекса. - person Mittenchops; 18.04.2013
comment
Да, в приведенном выше запросе используется индекс с именем человека, который ищет пару ключ/значение UID:1. Хотя на практике пары ключ/значение часто создаются для отражения свойств узла, насколько мне известно, в этом нет необходимости. Если вы посмотрите документацию по индексу REST (docs.neo4j.org/chunked /stable/rest-api-indexes.html) можно легко создавать индексы ключ/значение, которые не имеют ничего общего со свойствами узлов. - person MrDosu; 18.04.2013
comment
Я думаю, что не понимаю --- вы говорите, что мой синтаксис не создает ключ/значение в индексе, или вообще не создает узел, или не создает свойство на индексированном узле? - person Mittenchops; 18.04.2013
comment
Я имею в виду, что оператор шифра - это просто запрос. Вам нужно СОЗДАТЬ УНИКАЛЬНОЕ (assets.neo4j.org/download/Neo4j_CheatSheet_v3.pdf), но я не знаю, можете ли вы вообще индексировать узлы с помощью шифра (кроме автоматического индексирования). - person MrDosu; 19.04.2013

Метод не объявлен устаревшим, и аргумент properties по-прежнему действителен, как и прежде. Единственное изменение, как вы определили, это изменение с index на index_name для первого аргумента.

Документация здесь:

http://book.py2neo.org/en/latest/graphs_nodes_relationships.html#py2neo.neo4j.GraphDatabaseService.get_or_create_indexed_node

Обратите внимание, что properties будет фактически использоваться только тогда, когда узел еще не существует, то есть при выполнении «создания», но не при выполнении «получения». В противном случае существующий узел останется как есть.

person Nigel Small    schedule 19.04.2013