0

私はこのようなグラフを持っています

a-[:LIKES { 頻度:6 }]->アイス b-[:LIKES { 頻度:3 }]->ピザ など

このクエリを実行して、2 人が好む一般的な食べ物を見つけます。頻度属性を合計して食品のようなインデックスを作成すると、うまく機能します。

START b=node:node_auto_index(name='B') 
MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
WITH b, someone_else_too, r1.frequency + r2.frequency AS likeIndex 
RETURN likeIndex ,someone_else_too 
ORDER BY likeIndex DESC

ただし、私がやりたいのは、2 つの頻度値の最小値 (合計の最小値ではない) を見つけることです。したがって、この min(r1.frequency, r2.frequency) のようなものです。目標は、ペアの 1 つが特定の食べ物に非常に高い親和性を持っている場合に、好きなランキングを増加させる歪度を取り除くことです。

    START b=node:node_auto_index(name='B') 
    MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
    WITH b, someone_else_too, min(r1.frequency,r2.frequency) AS likeIndex 
    RETURN likeIndex ,someone_else_too 
    ORDER BY likeIndex DESC

ただし、Cypher はその構文を受け入れません。何か提案や回避策はありますか?ここでNeo4jコンソールを参照してください

4

3 に答える 3

1

2.0 では以下を使用できますcase/when: http://console.neo4j.org/r/y8sqi1

START b=node:node_auto_index(name='B') 
MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
WITH b, someone_else_too, 
  CASE WHEN r1.frequency < r2.frequency 
    THEN r1.frequency 
    ELSE r2.frequency 
  END AS likeIndex 
RETURN likeIndex ,someone_else_too 
ORDER BY likeIndex DESC
于 2013-08-02T20:54:50.707 に答える
1

apoc.coll.min を使用できます。

  START b=node:node_auto_index(name='B') 
MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
WITH b, someone_else_too, apoc.coll.min([r1.frequency, r2.frequency]) AS likeIndex 
RETURN likeIndex ,someone_else_too 
ORDER BY likeIndex DESC
于 2020-12-27T20:19:44.407 に答える
1

最小値を取得する数学的な方法があります:

(r1.frequency + r2.frequency - ABS(r1.frequency - r2.frequency))/2

しかし、それは少し重すぎます:(

于 2013-10-24T20:15:12.170 に答える