Neo4j / Cypher: создать отношения, если выполняется определенное условие

Я делаю операцию суммирования в моей базе данных графа: я сравниваю пару узлов, вычисляю фигуру, чтобы представить, насколько похожи определенные области графа, и если эта фигура достаточно большая, я хочу создать связь между узлами.

У меня есть запрос, который делает все это, за исключением проверки, достаточно ли велика фигура; в настоящее время он также создает отношения сходства, у которых показатель сходства равен 0 - и я этого не хочу.

Мой полный зашифрованный запрос несколько длинноват, поэтому я упростил его для этого поста. Поэтому я боюсь, что я не могу предоставить образец графа БД в консоли neo4j. Мой график содержитCenter узлы, которые имеютAffinity узлы иSearched узлы вокруг них. Если 2 центральных узла имеют сходные узлы Affinity или Searched, центральные узлы должны получить связь.

Вот упрощенное утверждение с аннотациями:

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

Я пытался ввести оператор CASE в разных местах, но, видимо, никогда не в нужном. Куда это должно идти?

Спасибо за вашу помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос