0

希望する結果を説明するために、新しいデータセットを作成しました。ここにリンクがあります

または、cypher を使用してこのコマンドをトリガーできます。

create 
(_6  {UserName:"dhansukh", UserProfileID:'1000', EMailID:'f@xyz.com'}),
(_5  {UserName:"dhruv", UserProfileID:'516', EMailID:'e@xyz.com'}),
(_4  {UserName:"dharmistha", UserProfileID:'5262', EMailID:'d@xyz.com'}),
(_3  {UserName:"dinesh", UserProfileID:'995', EMailID:'c@xyz.com'}),
(_2  {UserName:"dharmesh", UserProfileID:'502', EMailID:'b@xyz.com'}),
(_1  {UserName:"manish", UserProfileID:'1', EMailID:'a@xyz.com'}),
_1-[:friends {ApprovalStatus: 1} ]->_2,
_1-[:friends {ApprovalStatus: 1} ]->_3,
_1-[:friends {ApprovalStatus: 2} ]->_5,
_2-[:friends {ApprovalStatus: 1} ]->_3,
_2-[:friends {ApprovalStatus: 1} ]->_5,
_3-[:friends {ApprovalStatus: 1} ]->_4

今、次のクエリを試していますが、期待した結果が得られません。

START me=node:node_auto_index(UserProfileID = '1'), other=node(*) 
MATCH pMutualFriends=me-[r?:friends]-mf-[r1:friends]-other 
WHERE other.UserName =~ '(?i)dh.*' AND other.UserProfileID <> 1 
RETURN other.UserProfileID, other.UserName, r.ApprovalStatus, COUNT(pMutualFriends) AS mutualCount

上記の結果セットでは、(ApprovalStatus が原因で) 重複したレコードを取得しています。関係から、リンクされたノードのみを表示するだけですが、すべてのノードを「dh」で開始したいです。ノード 6 も欠落しています。理由がわかりませんか? 場合によっては、相互カウントも間違って表示されます。ApprovalStatus = 1 であるノードのみを相互カウントで考慮する必要があります。ログイン ノード (例: ノード 1) と検索ノードの両方が関係のプロパティ ApprovalStatus = 1 を持っているように。

編集: 私の予想される結果セット:

UserProfileID  UserName     ApprovalStatus  MutualCount 
-------------  --------     --------------  ----------- 
502            dharmesh     1               2           (node 3 & 5 )
516            dhruv        2               1           (node 2)
5262           dharmistha   null            1           (node 3) 
1000           dhansukh     null            0               

編集: 明確な理解のために画像を更新しています。

ここに画像の説明を入力

過去 20 ~ 25 日間、この問題に悩まされていますが、適切な解決策が得られていません。どこに問題があるのか​​ わかりません。この問題は、すでにスタックオーバーフローに何度も投稿しています。ここにリンクがあります、およびこれこれとその他多数。

4

2 に答える 2

1

コメントで述べたように、接続されたノードと切断されたノードを同時にクエリしようとするのは良い考えではないようです。

接続されたノードのみが必要な場合は、次のクエリを試してください。

START me=node:node_auto_index(UserName = 'manish') 
MATCH me-[:friends]-mf-[:friends]-other, me-[r?]-other 
WHERE other.UserName! =~ '(?i)dh.*' 
RETURN DISTINCT ID(other), r.ApprovalStatus AS status, count(mf) AS mutual, ID(me) 
ORDER BY mutual DESC , status ASC

match 句に別のパターンを追加する必要があったことに注意してください。これは、承認ステータスが (me) と (other) の間であり、(me) と (相互の友人) の間ではないためです。

これにより、予想される回答の最初の 3 行が返され、dhansukh は無視されます。

于 2013-07-31T15:18:35.207 に答える