2016-06-21 2 views
2

Je travaille sur un plugin Neo4j et j'ai besoin de récupérer une relation par valeur de propriété. J'ai accès à Neo4j GraphDatabaseService qui a une méthode très pratique GraphDatabaseService.findNode(Label label, String property , String value).Comment récupérer une relation Neo4 par propriété dans Java?

Je cherche la relation-contrepartie de cette méthode, quelque chose comme GraphDatabaseService.findRelationship(RelationshipType type, String property , String value).

Est-ce que cela existe? Est-ce sur la feuille de route? Y a-t-il un autre moyen?

+2

Ce ne marche pas exister et ne figure pas sur la feuille de route, la seule façon est d'utiliser des indices de Lucene pour indexer les valeurs des propriétés. Vous pouvez jeter un oeil à graphaware-uuid pour voir comment nous le faisons pour les uuids relationnels. –

+0

À l'heure actuelle, seuls les nœuds sont pris en charge avec des index de schéma, quels seraient vos cas d'utilisation pour trouver des relations par valeur sans le contexte des nœuds qui les entourent? –

+0

Vous pouvez accéder aux index manuels pour les relations via l'API Java, c'est plutôt sympa, car vous pouvez trouver les rels juste par l'intermédiaire de la propriété mais aussi dans le contexte de l'un de leurs nœuds d'extrémité. –

Répondre

1

À l'heure actuelle, seuls les nœuds sont pris en charge avec les index de schéma. Quels seraient vos cas d'utilisation pour trouver des relations par valeur sans le contexte des nœuds qui les entourent?

Vous pouvez accéder aux index manuels pour les relations via l'API Java, c'est plutôt sympa, car vous pouvez aussi bien find relationships juste via la propriété mais aussi dans le contexte de l'un de leurs nœuds d'extrémité. Si vous créez un index par type rel, il est également très utile pour les nœuds avec de nombreuses relations d'en filtrer quelques-uns en passant également dans le nœud de début ou de fin. C'est ce que j'ai ajouté dans la bibliothèque de procédures APOC.

Mais vous devrez ajouter des relations à cet index manuellement.

+0

Merci Michael! Mon cas d'utilisation est le plugin neo4j-to-elasticsearch. J'ajoute la prise en charge de l'indexation des relations et j'aimerais récupérer les relations par UUID (lorsqu'une relation a correspondu à une requête de recherche dans ES). De la réponse de Christophe, je suppose que je dois juste accéder au plugin UUID du plugin ElasticSearch et je serai bien :) –

0

Résumant des réponses de Michael et Christophe:

  • trouver une relation par la valeur de la propriété avec un indice de schéma n'est pas implémenté
  • trouver des relations de propriété est possible en utilisant des index manuels
  • GraphAware's UUID Neo4j plugin-t juste que (utilise des index manuels) pour les UUID

Pour obtenir une relation navire par UUID, voici le code:

public Relationship getRelByUuid(GraphDatabaseService database, String uuid) { 
    UuidReader reader = new DefaultUuidReader(
     getStartedRuntime(database).getModule(UuidModule.class).getConfiguration(), 
     database 
    ); 
    return database.getRelationshipById(uuidReader.getRelationshipIdByUuid(uuid)); 
}