Neo4j / Cypher: crea una relación si se cumple cierta condición

Estoy haciendo una operación de suma en mi DB gráfico: comparo un par de nodos, calculo una figura para representar cuán similares son ciertas regiones del gráfico y si esa cifra es lo suficientemente grande, quiero crear una relación entre los nodos.

Tengo una consulta que hace todo eso, excepto para verificar si la cifra es lo suficientemente grande; actualmente también crea relaciones de similitud cuyo puntaje de similitud es 0, y no quiero eso.

Mi consulta de cifrado completa es algo larga, así que la he simplificado para esta publicación. Por lo tanto, me temo que no puedo proporcionar un db gráfico de muestra en la consola neo4j. Mi gráfico contieneCenter nodos, que tienenAffinity nodos ySearched nodos a su alrededor. Si 2 nodos centrales tienen afines similares o nodos buscados, los nodos centrales obtendrán una relación.

Aquí está la declaración simplificada con anotaciones:

MATCH (a:Center), (x:Center)
WHERE id(a) <> id(x)
OPTIONAL MATCH a-->(aff1:Affinity), x-->(aff2:Affinity)
WHERE aff1.affinityReference=aff2.affinityReference     // if the Affinity nodes have the same reference, then their Center nodes are similar
OPTIONAL MATCH a-->(search1:Search), x-->(search2:Search)
WHERE search1.searchTerm = search2.searchTerm   // if the Search nodes have the same searchTerm, then their Center nodes are similar
WITH a, x, 
SUM (CASE WHEN aff2.relative_weight IS NULL THEN 0 ELSE (aff2.relative_weight * 5) END) AS AffinityScore, // Affinity nodes have a relative weight, which shall be used in the similarity calculation.
(count(search2) * 5) AS SearchScore   // matching Search nodes shall just be counted and multiplied with 5.

OPTIONAL MATCH x-[r1:IS_SIMILAR_TO]->()  // Delete all similarity relationships for x
WITH a,x,r1,AffinityScore, SearchScore, (AffinityScore+SearchScore) AS TotalScore

DELETE r1   // delete relationship if it exists...
MERGE      // ... and create it anew.
  x-[:IS_SIMILAR_TO {
  SimilarityScore:Total,
  AffinityScore:AffinityScore,
 SearchScore:SearchScore
 }]->a

RETURN a, x, AffintyScore, SearchScore, TotalScore 
ORDER BY TotalScore DESC

He intentado introducir una declaración CASE en varios lugares, pero aparentemente nunca en la correcta. ¿A dónde debería ir?

¡Gracias por tu ayuda!

Respuestas a la pregunta(1)

Su respuesta a la pregunta