Neo4j / Cypher: crie relacionamento se determinada condição for atendida

Estou executando uma operação de soma no banco de dados do gráfico: comparo dois nós, calculo uma figura para representar como certas regiões do gráfico são semelhantes e, se essa figura for grande o suficiente, quero criar um relacionamento entre os nós.

Eu tenho uma consulta que faz tudo isso, exceto para verificar se a figura é grande o suficiente; atualmente, também cria relações de similaridade cuja pontuação é 0 - e eu não quero isso.

Minha consulta cifrada completa é um pouco demorada, então eu a simplifiquei para este post. Portanto, temo não poder fornecer um gráfico de amostra db no console neo4j. Meu gráfico contémCenter nós, que têmAffinity nós eSearched nós ao seu redor. Se 2 nós centrais tiverem nós de afinidade ou de pesquisa semelhantes, os nós centrais terão um relacionamento.

Aqui está a declaração simplificada com anotações:

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

Eu tentei introduzir uma declaração CASE em vários lugares, mas aparentemente nunca na correta. Para onde deveria ir?

Obrigado pela ajuda!

questionAnswers(1)

yourAnswerToTheQuestion