Pergunta

Este é um gráfico cujos nós existe em muitos componentes ligados ao mesmo tempo, porque as relações de um nó são um conjunto de grupos de borda de tal forma que apenas uma borda por grupo borda podem estar presentes ao mesmo tempo. Eu preciso ser capaz de encontrar todos os componentes conectados que existe um nó. O que seria a melhor maneira de armazenar este gráfico em Neo4j para encontrar rapidamente todos os componentes conectados que existe um nó em? Existe uma maneira de usar o construída em travessias de fazer isso?

Além disso: há um nome para este tipo de gráfico? Eu aprecio qualquer ajuda / ideias.

Update:

Desculpe por não ser clara. Todos os nós são do mesmo tipo. Os nós têm um número variável de grupos de borda. Exactamente uma borda de cada grupo borda necessidades para ser escolhido por um componente ligado específico. Vou tentar explicar através do exemplo:

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)

primeiro grupo borda do Então x1 é (x2, x3, x4), sua segunda Edge Group é (x5, x6), e seu grupo de terceira vantagem é (x7).

Então, aqui estão alguns componentes conectados que x1 existe em:

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

etc.

Eu sou grato pela sua ajuda neste processo.

Update2:

Eu acho que vou ser capaz de fazer isso se há uma resposta a esta pergunta: como posso especificar qual tipo de relação para usar como uma função do nó atual em cada etapa de um percurso com Neo4j?

Foi útil?

Solução

Eles maneira que eu entendi sua pergunta você tem um número de nós, vamos chamá-los X nós , que são conectados a um número de nós tipo (ou algo similar), vamos chamar esses nós T nós . Um nó X pode ter conexões com vários nós T, mas apenas uma conexão para cada nó T, ou possivelmente apenas uma conexão para cada tipo do nó T (sua descrição é um pouco confuso aqui).

A maneira que eu iria modelar isso é usando um RelationshipType para cada (tipo de) nó T. Então você pode usar x_node.getRelationships (T_TYPE_ONE, T_TYPE_TWO, ... etc ...) para obter todos os nós do T de um nó X. Quando você transformar um X nó é onde você precisa para manter seu invariável que ela só pode ter no máximo um relacionamento com cada (tipo de) nó T. Você pode fazer isso usando x_node.getSingleRelationship (THE_T_TYPE_YOURE_MUTATING), se que retorna nulo, é seguro para adicionar um novo relacionamento desse tipo, se ele retorna um relacionamento, você terá que removê-lo antes de adicionar o novo.

exemplo ASCII-art deste modelo (como eu interpretá-lo):

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

No exemplo acima, ambos os nós X são parte dos componentes T_ONE, mas x1 é parte de T_ONE T1a componente e x2 é parte de T1b. Ambos são parte de T_THREE T3a componente, então x1 é parte de T_TWO T2A componente e x2 é parte de T_FOUR T4A componente. Consultando neste exemplo seria algo parecido com:

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 atualização ficaria assim:

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

Por favor, deixe-me saber se eu mal interpretado suas necessidades, e eu vou ser feliz em dar sua descrição atualizada uma facada.

Outras dicas

Em relação a outra consulta, eu apontei algumas possibilidades para funções de grão fino em como posso especificar qual tipo de relação para usar como uma função do nó atual em cada etapa de um percurso com Neo4j? Basicamente, não use um traverser mas o node.getRelationship mais direta * API e construir sua própria iteração para controle fino de grão.

O que resolveu seu problema?

/ peter neubauer

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top