グラフ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]
コメントを追加