2013-04-18 4 views
0

Je suis en train de créer un noeud indexé dans Cypher, avec la syntaxe suivante:Créer des nœuds indexés sur Neo4j Cypher via le repos 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] 

Pourquoi est-ce que le nœud semble être créé, mais la propriété Je crée, et qui semble être retourné avec succès, n'existe pas?

Existe-t-il un moyen plus simple? Je l'habitude d'utiliser la fonction de py2neo:

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

Mais cela semble avoir été dépréciée --- il ne fonctionne plus avec la dernière version de py2neo, qui ne semble pas soutenir l'argument properties plus longtemps (et pour l'avenir les gens, index est remplacé par index_name).

Répondre

2

Un index et une propriété sont deux choses différentes.

Il semble que vous ayez un noeud dans votre graphe avec un index nommé person et une paire clé/valeur UID: "1". Votre première requête obtient votre noeud par son index. Mais l'index n'est pas une propriété du nœud. Vous pouvez lancer le webadmin pour visualiser comment les indices sont gérés dans votre graphique. Pour autant que je sache, il n'y a rien dans la documentation sur la façon de créer des index avec chiffrement, mais vous pouvez facilement utiliser l'API REST pour les manipuler (link).

+0

L'index "personne" n'est-il pas donné par 'start n node:/person /'? Les propriétés sont définies dans parens après. Py2neo utilise l'API REST sous le capot pour avoir créé l'index. – Mittenchops

+0

Oui, la requête ci-dessus utilise l'index nommé personne recherchant la paire clé/valeur UID: "1". Alors qu'en pratique, les paires clé/valeur sont souvent créées pour refléter les propriétés des nœuds, cela n'est pas nécessaire pour autant que je sache. Si vous regardez la documentation de l'index REST (http://docs.neo4j.org/chunked/stable/rest-api-indexes.html), vous pouvez facilement créer des index clé/valeur qui n'ont rien à voir avec les propriétés des nœuds. – MrDosu

+0

J'ai édité le nom de l'index que je me suis trompé – MrDosu

1

La méthode n'a pas été abandonnée et l'argument properties est toujours valide, comme précédemment. Le seul changement, comme vous l'identifiez, est le changement de index à index_name pour le premier argument.

La documentation est ici:

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

Notez que le properties ne fera que réellement être utilisé lorsque le nœud n'existe pas déjà, à savoir lorsque vous faites un « créer », mais pas lorsque vous faites un « get » . Sinon, le nœud existant restera tel quel.

Questions connexes