neo4j gremlin

neo4j - ¿Cómo conseguir amigos de amigos que tienen el mismo interés?



gremlin (2)

Hacer amigos de un amigo es bastante fácil, obtuve esto que parece funcionar muy bien.

g.v(1).in(''FRIEND'').in(''FRIEND'').filter{it != g.v(1)}

Pero lo que quiero hacer es conseguir amigos de amigos que tengan los mismos intereses. Debajo quiero que sugieran a Joe Moe pero no a Noe porque no tienen el mismo interés.


¿Esto tiene que ser en GREMLIN? Si Cypher es aceptable, puede hacer:

START s=node(Joe) MATCH s-[:FRIEND]-()-[:FRIEND]-fof, s-[:LIKES]-()-[:LIKES]-fof WHERE s != fof RETURN fof


Simplemente necesita extender su travesaño gremlin para pasar los bordes LIKES también:

g.v(1).in(''FRIEND'').in(''FRIEND'').filter{it != g.v(1)}.dedup() / as(''friend'').in(''LIKES'').out(''LIKES'').filter{it == g.v(1)}. / back(''friend'').dedup()

Básicamente, esto va a amigos de amigos, como lo hizo antes y guarda la posición en la tubería debajo del nombre friend . Luego sale a me gusta mutua y busca el nodo fuente original. Si encuentra uno, salta friend . La dedup() solo elimina duplicados y puede acelerar los cruces.

La direccionalidad de esto puede no ser 100% correcta ya que no ha indicado la dirección de los bordes en su diagrama.