Si el número de propiedades es mayor que n, regrese de un gráfico altamente conectado en Neo4j

Esta pregunta es una extensión directa de una pregunta que hice anteriormenteaquí (e incluso la versión anterioraquí)

Digamos que tengo una base de datos gráfica que se ve así:

Al igual que las preguntas anteriores que hice, lo único realmente interesante de esto es queSomeProperty puede ser 'Sí' o 'No'.

En la fila superior, 1 de los tres nodos tiene un 'Sí' para esta propiedad.

En la fila inferior, 3 nodos de los cinco nodos tienen un 'Sí' para esta propiedad.

(Ligera nota filosófica: Estoy empezando a sospechar que este es un mal esquema gráfico. ¿Por qué? Porque, dentro de cada conjunto de nodos, cada nodo está conectado a todos los demás. No estoy preocupado por el hecho de que haya dos grupos de nodos, sino por el hecho de que cuando relleno este gráfico, recibo una respuesta que dice: 'Devolvió 530 filas'. Creo que esto significa que en realidad se crearon 530 subrutas dentro de la estructura del gráfico y esto parece una exageración).

De todos modos, el problema que estoy tratando de resolver es más o menos el mismo que estaba tratando de resolver en el contexto anterior, más simple y más lineal.aquí.

Quiero devolver la ruta completa de cualquiera de estos gráficos disjuntos, mientras que en cualquier lugar dentro de dicho gráfico se cuentan las ocurrencias deSomeProperty es mayor que 2.

Creo que este es un problema común y simple. Por ejemplo, digamos que tenía dos familias no relacionadas, y alguien dice: "Muéstrame con la familia tiene más de 2 personas zurdas".

El #cybersam súper inteligente recomendado para la encarnación más simple de este problema, algo así como:

MATCH p=(a:person)-[:RELATED_TO*]->(b:person)
WHERE
  NOT ()-[:RELATED_TO]->(a) AND
  NOT (b)-[:RELATED_TO]->() AND
  2 < REDUCE(s = 0, x IN NODES(p) | CASE WHEN x. SomeProperty = 'Yes' THEN s + 1 ELSE s END)
RETURN p;

... lo que funciona muy bien si el gráfico se parece más a una línea recta y no tiene cada nodo del conjunto relacionado entre sí.

Creo que la razón por la cual la consulta de # cybersam no manejará este gráfico más complejo es porque no hay un nodo terminal.

(Otra nota al margen filosófica: Estoy empezando a proponer teorías que las relaciones densas e intrincadas en un gráfico plantean problemas combinatorios, con el rendimiento y las consultas. Creo que esto podría deberse a la bidireccionalidad utilizada por Cypher al realizar consultas.

Aquí están mis datos. Cualquier consejo es apreciado y gracias por ayudarme a subir la curva de aprendizaje.

// match (n) detach delete n;

CREATE (albert:person {gender: 'Male', name: 'Albert', SomeProperty: 'Yes'})
CREATE (annie:person {gender: 'Female', name: 'Annie', SomeProperty: 'No'})
CREATE (adrian:person {gender: 'Female', name: 'Adrian', SomeProperty: 'No'})

CREATE (albert)-[:RELATED_TO]->(annie)
CREATE (annie)-[:RELATED_TO]->(albert)
CREATE (annie)-[:RELATED_TO]->(adrian)
CREATE (adrian)-[:RELATED_TO]->(annie)
CREATE (albert)-[:RELATED_TO]->(adrian)
CREATE (adrian)-[:RELATED_TO]->(albert)


CREATE (bill:person {gender: 'Male', name: 'Bill', SomeProperty: 'Yes'})
CREATE (barb:person {gender: 'Female', name: 'Barb', SomeProperty: 'Yes'})
CREATE (barry:person {gender: 'Male', name: 'Barry', SomeProperty: 'Yes'})
CREATE (bart:person {gender: 'Male', name: 'Bart', SomeProperty: 'No'})
CREATE (bartholemu:person {gender: 'Male', name: 'Bartholemu', SomeProperty: 'No'})

CREATE (bill)-[:RELATED_TO]->(barb)
CREATE (barb)-[:RELATED_TO]->(bill)
CREATE (barb)-[:RELATED_TO]->(barry)
CREATE (barry)-[:RELATED_TO]->(barb)
CREATE (barry)-[:RELATED_TO]->(bart)
CREATE (bart)-[:RELATED_TO]->(barry)
CREATE (bart)-[:RELATED_TO]->(bartholemu)
CREATE (bartholemu)-[:RELATED_TO]->(bart)
CREATE (bill)-[:RELATED_TO]->(bartholemu)
CREATE (bartholemu)-[:RELATED_TO]->(bill)

Respuestas a la pregunta(1)

Su respuesta a la pregunta