Je suis nouveau à Neo4j
et une question:Puis-je avoir l'indexation des nœuds et des relations (normal et fulltext) en utilisant http dans les transactions de neo4j?
Tout ce que je veux est d'être en mesure de add
/update
nœuds et les relations, ont leurs accessoires immédiatement indexed
, certaines avec , et tout enfermé dans transactions
, utilisable à partir Python
. Est-ce possible?
Je le requirements
pour suivre l'utilisation Neo4j:
- Utilisez-de
Python
. - Indexation immédiate de
nodes
et de leurs propriétés. - Indexation immédiate de
relationships
et de leurs propriétés. Fulltext indexing
de certaines propriétés de noeud/relations. Addition et population denew indexes
pour un graphe existant.- Plusieurs appels séparés en lecture et en écriture
enclosed in one transaction
(avec une commande de validation ou de restauration séparée à la fin).
Ajouté le 07/07/2013: Je voudrais intégrer Neo4j avec les CMS plones, qui ont plusieurs bases de données transactionnelles connectées. Un utilisateur peut faire un appel aux cms, ce qui en retour affect multiple databases
. Donc, juste parce que Neo4j n'a pas retourné une erreur ne signifie pas que la transaction devrait s'engager - un abandon peut être causé par une erreur ailleurs, dans une autre base de données ou un morceau de code.
D'après les expériences que je l'ai fait jusqu'à présent (en utilisant neo4j-community-2.0.0-M03
) il me semble:
configuration
[node|relationship]_auto_index
me donnera 2,3,4, mais pas 5. Et
il n'y a qu'un seul auto_index pour les noeuds/relations, donc tous les attributs sont fulltext, ou none.Les index
label/schema
me donneraient un index d'exécution configurable pour 2, mais pas pour 3, car ils ne fonctionnent que pour les nœuds.Le
REST API
me donne 1,2,3,4, permettrait 5 (parce que je pourrais ajouter déjà
noeuds/relations et leurs propriétés à de nouveaux index). Il ne peut pas faire 6, car en dehors des lots n'est pas transactionnel. Ainsi, les erreurs qui se produisent après l'exécution du lot n'ont pas pu déclencher un abandon.La
transactional endpoint
en combinaison avecauto_indexing
etlabels/schema
me donne 1,2,4,5 (nœuds seulement) et 6, mais pas 3, parce que les étiquettes/schéma ne fonctionne que sur nœuds. EtCypher
ne permet pas d'ajouter par ex. les relations avec les index.
Mon grand espoir est que j'ai raté quelque chose, et que toutes les 6 exigences pourraient être remplies. Des indices?
5. auto_indexing, vous devez propriétés « tactiles » sur les nœuds existants afin d'indexer, de sorte qu'il peut être fait (juste traverser le graphique et faire my_node.my_prop_value = my_node.my_prop_value) 6. Si vous utilisez Gremlin sur REST, vous pouvez gérer les transactions comme vous voulez (en un seul appel). Il est peut-être possible de le faire avec Cypher aussi, mais je ne suis pas très familier avec. – RaduK
Merci pour l'astuce sur « toucher ». Je vois comment je pourrais d'abord modifier la liste des attributs auto_index, puis toucher tous les nœuds. En ce qui concerne les transactions - je voudrais mélanger plusieurs appels neo4j (lire, écrire) avec la logique python, et ne veux que commettre à la fin, si aucune erreur n'est survenue du côté de python. Commettre un seul script ne suffirait donc pas. –
Il y a une [interface REST transactionnelle] (http://docs.neo4j.org/chunked/snapshot/rest-api-transactional.html) dans la fabrication, ce qui vous aiderait avec 6. C'est encore expérimental cependant. –