Domanda

Questo è un grafico cui nodi esistere in molti componenti collegati contemporaneamente perché le relazioni di un nodo sono un insieme di gruppi di bordo tali che solo un bordo per gruppo bordo può essere presente in una sola volta. Ho bisogno di essere in grado di trovare tutti i componenti collegati che un nodo esiste in. Quale sarebbe il modo migliore per conservare questo grafico in Neo4j per trovare rapidamente tutti i componenti collegati che un nodo esiste in? C'è un modo per utilizzare il costruito nel attraversamenti per fare questo?

Inoltre: c'è un nome per questo tipo di grafico? Apprezzerei tutto aiuto / idee.

Aggiornamento:

Ci scusiamo per non essere chiaro. Tutti i nodi sono dello stesso tipo. Nodi hanno un numero variabile di gruppi di bordo. Esattamente un bordo di ciascun gruppo bordo deve essere scelto per un particolare componente collegato. Io vado a cercare di spiegare con l'esempio:

Node x1 is related to: (x2 or x3 or x4) AND (x5 or x6) AND (x7)
Node x2 is related to: (x8) AND (x9 or x10)

Quindi, primo gruppo bordo di x1 è (x2, x3, x4), il secondo gruppo di bordo è (x5, x6), e il suo gruppo di terzo bordo è (x7).

Così qui sono un paio di componenti collegati che x1 esiste in:

CC1:

x1 is related to: x2, x5, x7
x2 is related to: x8 x9 

CC2:

x1 is related to: x2, x6, x7
x2 is related to: x8, x9

CC3:

x1 is related to: x3, x5, x7

CC4:

x1 is related to: x3, x6, x7

ecc.

Sono grato per il vostro aiuto in questo.

Update2:

Credo che sarò in grado di fare questo se c'è una risposta a questa domanda: come faccio a specificare che tipo di relazione da utilizzare in funzione del nodo corrente ad ogni passo di un attraversamento con Neo4j?

È stato utile?

Soluzione

Si mio modo di capire la tua domanda si dispone di un numero di nodi, chiamiamoli X nodi , che sono collegati a un numero di nodi di tipo (o qualcosa di simile), che chiameremo questi nodi nodi T . Un nodo X può avere connessioni a più nodi di T, ma solo una connessione ad ogni nodo T, o forse solo una connessione ad ogni tipo di nodo T (descrizione è un po 'sfocata qui).

Il modo avrei modello è utilizzando uno RelationshipType per ogni (tipo di) nodo T. Quindi è possibile utilizzare x_node.getRelationships (T_TYPE_ONE, T_TYPE_TWO, ... ecc ...) per ottenere tutti i nodi T da un nodo X. Quando processo di mutazione un nodo X è dove è necessario mantenere la vostra invariante che si può avere solo al massimo un rapporto ad ogni (tipo di) nodo T. A tale scopo, utilizzando x_node.getSingleRelationship (THE_T_TYPE_YOURE_MUTATING), se questo restituisce nulla, è sicuro di aggiungere un nuovo rapporto di quel tipo, se restituisce un rapporto, si dovrà rimuovere prima di poter aggiungere quello nuovo.

esempio ASCII-art di questo modello (come l'interpreto):

(x1)--T_ONE-->(t1a)   (t1b)<--T_ONE--(x2)--T_FOUR-->(t4a)
 |\                                   |
 \ |---T_TWO-->(t2a)                 /
  \                                 /
   |---T_THREE-->(t3a)<--T_THREE---/

Nell'esempio sopra entrambi i nodi X fanno parte dei componenti T_ONE, ma x1 fa parte del componente T_ONE T1a e x2 è parte di T1b. Entrambi sono parte di componente T_THREE T3a, allora x1 è parte del componente T_TWO T2A, e x2 è parte del componente T_FOUR T4A. Interrogazione in questo esempio potrebbe essere simile a:

Iterable<Relationship> x1_comps = x1.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);
Iterable<Relationship> x2_comps = x2.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);

e l'aggiornamento sarebbe simile a questa:

void setComponent(Node xNode, RelationshipType tType, Node tNode) {
    Relationship current = xNode.getSingleRelationship(tType);
    if (current != null) current.delete();
    xNode.createRelationshipTo(tNode, tType);
}

Per favore fatemi sapere se ho interpretato male le vostre esigenze, e sarò felice di dare la vostra descrizione aggiornata una pugnalata.

Altri suggerimenti

Per quanto riguarda l'altra domanda, ho fatto notare alcune possibilità per belle funzioni grana a come faccio a specificare che tipo di relazione da utilizzare in funzione del nodo corrente ad ogni passo di un attraversamento con Neo4j? In sostanza, non utilizzare un traverser ma il più diretto node.getRelationship * API e costruire il proprio iterazione per controllo a grana fine.

Questo vuol risolvere il tuo problema?

/ Peter Neubauer

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top