2016-09-22 3 views
0

ユーザーがレシピを投稿できるソーシャルグラフを設計しています。ユーザーがログインすると、彼は彼の所在地の周りの人からのレシピ、また彼の国のトップレシピを見るでしょう。レシピを投稿したユーザーに各ユーザーのrelevance点数を保存します。関連度スコアを持つソーシャルグラフアプリケーションの設計

たとえば、ある場所に4人いるとします。あいうえお。 AはBのレシピの3つとCのレシピの2つが好きです。したがって、BのAのrelevanceは3、Cの値は2です。Aが誰かのレシピを気に入るたびに更新し続けます。

この関連性を保存する最適な方法は何でしょうか?保存のためにNeo4jを使用しており、FaceBookのログインに基づいて動作するため、FaceBook friendsの初期値はrelevanceです。

答えて

2

は、ここでそれに行くための簡単な例データモデル

ノード

(:User {id: 123}) 
    (:Recipe {id: 234, name: 'my recipe', text: ' ... '}) 

関係

(:User)-[:POSTED]->(:Recipe) 
    (:User)-[:LIKES]->(:Recipe) 
    (:User)-[:RELEVANCE {score: 2}]->(:User) 

そして、いくつかのサイファーです。

  • ユーザ123回の投稿レシピ

    MATCH (a:User {id: 123}) 
    CREATE (a)-[:POSTED]->(r:Recipe {id: 234, name: 'my recipe', text: ' ... '}) 
    
  • ユーザ345は、このコードは、また/レシピのポスターに対して関連性スコアを増分作成レシピ234が好き。

    MATCH (b:User {id: 345}), (r:Recipe {id: 234})<-[:POSTED]-(poster:User) 
    CREATE (b)-[:LIKES]->(r) 
    MERGE (b)-[relevance:RELEVANCE]->(poster) 
    ON CREATE SET relevance.score = 1 
    ON MATCH SET relevance.score = relevance.score + 1; 
    
関連する問題