Neo4j / Cypher:特定の条件が満たされた場合に関係を作成します

レネ

グラフDBで合計演算を実行しています。いくつかのノードを比較し、グラフの特定の領域がどれほど類似しているかを表す数値を計算します。その数値が十分に大きい場合は、ノード間の関係を作成します。

図が十分に大きいかどうかのチェックを除いて、すべてを実行するクエリがあります。現在、類似性スコアが0の類似性関係も作成されますが、これは望ましくありません。

私の完全な暗号クエリはやや長いので、この投稿のために簡略化しました。したがって、neo4jコンソールでサンプルグラフデータベースを提供することはできません。私のグラフにはCenterノードが含まれており、AffinityノードとSearchedその周囲にノードがあります。2つのセンターノードが同様のアフィニティノードまたは検索ノードを持っている場合、センターノードは関係を取得します。

注釈付きの簡略化されたステートメントは次のとおりです。

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ステートメントを導入しようとしましたが、正しいものではないようです。どこに行けばいいの?

ご協力いただきありがとうございます!

ステファンアームブラスター

条件付き変更操作を実行するためのトリックがありCASEます。条件が真の場合はステートメントを使用して長さ1のリストを返し、それ以外の場合は空のリストを返します。その後、FORACHその配列を反復処理して、CREATEまたはMERGE

...
WITH a, x, AffintyScore, SearchScore, TotalScore, Total, 
  CASE AffinityScore WHEN 0 THEN [] ELSE [1] END as array
FOREACH (x in array | 
   MERGE
   x-[:IS_SIMILAR_TO {
   SimilarityScore:Total,
   AffinityScore:AffinityScore,
   SearchScore:SearchScore
   }]->a 
)
RETURN a, x, AffintyScore, SearchScore, TotalScore 
ORDER BY TotalScore DESC

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Neo4j / Cypher:ノード間の関係のいずれかが特定の基準を満たしている場合にノードを返します

分類Dev

Neo4j/Cypher - 別のノードが特定の条件を満たした場合にノードを設定する

分類Dev

IF ... ELSE with Cypher Neo4J

分類Dev

neo4j Cypher IF THEN ELSE

分類Dev

Count and operations in Neo4j cypher

分類Dev

neo4jの暗号

分類Dev

Neo4j HTTPSのみ?

分類Dev

neo4jの自然順

分類Dev

Neo4j:「NOTCONTAINS」はNeo4jに存在しますか?

分類Dev

neo4jに関係が存在する場合は、新しい関係を作成します

分類Dev

Cypher(Neo4j)-ノードからの1つの関係が検索パスに関係なく条件を満たす限り、すべての関係を検索しますか?

分類Dev

Neo4j、Cypher:条件付き作成

分類Dev

暗号ごとに関係を作成します-neo4j

分類Dev

以前の関係がNEO4Jに存在する場合は、関係プロパティを更新します

分類Dev

特定の関係を持たないノードの検索(Cypher / neo4j)

分類Dev

Neo4J COALESCEとの関係

分類Dev

Neo4jの親子関係

分類Dev

Neo4j双方向の関係

分類Dev

neo4jで関係を築く

分類Dev

Neo4jを使用したJava

分類Dev

Neo4j Cypherは、指定されたプロパティとの関係に達するまでノードを取得します

分類Dev

Neo4J / Cypherクエリの支援

分類Dev

Neo4j、一致関係WHERE AND

分類Dev

neo4jの不明な関数 'org.neo4j.examples.join'

分類Dev

api ... neo4j 2.0.1で作成された場合、関係はneo4jWebブラウザーに表示されません

分類Dev

Neo4j条件ベースの出力

分類Dev

Neo4jノードの作成速度

分類Dev

neo4jの合計値

分類Dev

Neo4jのLAST関数

Related 関連記事

  1. 1

    Neo4j / Cypher:ノード間の関係のいずれかが特定の基準を満たしている場合にノードを返します

  2. 2

    Neo4j/Cypher - 別のノードが特定の条件を満たした場合にノードを設定する

  3. 3

    IF ... ELSE with Cypher Neo4J

  4. 4

    neo4j Cypher IF THEN ELSE

  5. 5

    Count and operations in Neo4j cypher

  6. 6

    neo4jの暗号

  7. 7

    Neo4j HTTPSのみ?

  8. 8

    neo4jの自然順

  9. 9

    Neo4j:「NOTCONTAINS」はNeo4jに存在しますか?

  10. 10

    neo4jに関係が存在する場合は、新しい関係を作成します

  11. 11

    Cypher(Neo4j)-ノードからの1つの関係が検索パスに関係なく条件を満たす限り、すべての関係を検索しますか?

  12. 12

    Neo4j、Cypher:条件付き作成

  13. 13

    暗号ごとに関係を作成します-neo4j

  14. 14

    以前の関係がNEO4Jに存在する場合は、関係プロパティを更新します

  15. 15

    特定の関係を持たないノードの検索(Cypher / neo4j)

  16. 16

    Neo4J COALESCEとの関係

  17. 17

    Neo4jの親子関係

  18. 18

    Neo4j双方向の関係

  19. 19

    neo4jで関係を築く

  20. 20

    Neo4jを使用したJava

  21. 21

    Neo4j Cypherは、指定されたプロパティとの関係に達するまでノードを取得します

  22. 22

    Neo4J / Cypherクエリの支援

  23. 23

    Neo4j、一致関係WHERE AND

  24. 24

    neo4jの不明な関数 'org.neo4j.examples.join'

  25. 25

    api ... neo4j 2.0.1で作成された場合、関係はneo4jWebブラウザーに表示されません

  26. 26

    Neo4j条件ベースの出力

  27. 27

    Neo4jノードの作成速度

  28. 28

    neo4jの合計値

  29. 29

    Neo4jのLAST関数

ホットタグ

アーカイブ