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.