2013-07-02 4 views
0

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:

  1. Utilisez-de Python.
  2. Indexation immédiate de nodes et de leurs propriétés.
  3. Indexation immédiate de relationships et de leurs propriétés.
  4. Fulltext indexing de certaines propriétés de noeud/relations. Addition et population de new indexes pour un graphe existant.
  5. 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 avec auto_indexing et labels/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. Et Cypher 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?

+0

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

+0

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. –

+0

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. –

Répondre

1

Comme mentionné dans les commentaires dont vous avez besoin pour aller avec le point final REST transactionnel (actuellement expérimentale). En combinaison avec des étiquettes et l'indexation déclarative cela résout les exigences 1, 2, 5, 6.

Combinant cela avec l'indexation automatique des propriétés de relation permet de résoudre 3 et 4. Reconstruire un indice d'auto relation peut être fait avec Cypher:

start r = rels(*) set r.<prop> = r.<prop> 

pour toutes les propriétés autoindexable. Pour les grands ensembles de données et envisager d'utiliser limitskip afin d'avoir le contrôle sur la taille de la transaction lors de l'indexation.

+0

Merci beaucoup. En utilisant vos conseils, j'ai créé un exemple de configuration en utilisant les données dbpedia: https://baach.de/Members/jhb/dbpedia-and-neo4j-first-steps-ii#section-2 –

Questions connexes