2016-03-29 7 views
1

私はNeo4jを使用して大学のコース推薦システムに取り組んでおり、この問題でレンガの壁に当たっています。Cypherクエリーから周波数を戻すことが困難になった

私がしたいことは、システムに関心を寄せていることです。その関心と関係のある学生(:HAS_INTEREST)に対してこの関心がチェックされ、その後、学生が登録されているすべてのコースが返されます。検索に表示される頻度(ほとんどの生徒とのコースが推奨されます)。そのために私はこのクエリを使用します。

MATCH (interest:Interest {description:"Computing"})<-[:HAS_INTEREST]-(student:Student), 
(student)-[:ENROLLED_IN]->(course:Course) 
RETURN course.title, count(course) as frequency 
ORDER BY frequency DESC 
LIMIT 25 

クエリは、私が欲しいのデータを返します(発生のコース名及び周波数)私はのNeo4jのブラウザを使用してクエリを入力するときが、私はCYPHERを作るしようとすると、私の問題が発生しますC#のクエリ。私は各コースの頻度を得ることができません。私はすべてのコースを返すことができますし、注文しても、私は彼らが適切な推奨を与えるように見える頻度が必要です。私はそれを保存することができるかどうかを確認するためにコースのクラスに頻度属性を追加私のコード

以下のコースクラス

public class Course 
    { 
     public string title { get; set; } 

     public long fequency { get; set; } 
    } 

サイファークエリ

 public static IEnumerable<Course> GetCourseRecommendation(string interest) 
     { 
     var data = GraphClient.Cypher 
      .Match("(i:Interest {description : {interestDesc} })<-[:HAS_INTEREST]-(student:Student)", "(student)-[:ENROLLED_IN]->(course: Course)") 
      .WithParam("interestDesc", interest) 
      .With((course, c) => new 
      { 
       course = course.As<Course>(), 
       c = course.Count() 
      }) 
      .Return(course => course.As<Course>()) 
      .OrderByDescending("c") 
      .Limit(25) 
      .Results; 

     return data; 
     } 

をレイアウトしますそこに運がない、私はそれの周波数を得ることができますが、何も動作するように見えるかどうかを確認するために、ネットのクエリのさまざまなバリエーションを試してみました、それはコースを返します。

tl; dr検索結果にコースが何回出現する頻度を知る必要があり、.Netライブラリを使用してこの情報を取得する方法がわかりません。

編集:回答の答えと問題への説明をするためのSupamiuクリスSkardonから

感謝。最終的な作業クエリーが以下にリストされています。これは、コースに表示されるコースと頻度を返します。

  var data = GraphClient.Cypher 
       .Match("(i:Interest {description : {interestDesc} })<-[:HAS_INTEREST]-(student:Student)", "(student)-[:ENROLLED_IN]->(course: Course)") 
       .WithParam("interestDesc", interest) 
       .Return((course, c) => new 
       { 
        course = course.As<Course>(), 
        c = course.Count() 
       }) 
       .OrderByDescending("c") 
       .Limit(25) 
       .Results; 

答えて

1

問題は、あなたのコースに周波数を追加したい場合は、クエリ内の2つの異なる変数でcoursefrequencyを保存することで、you'lは後でcourse.setFrequency(c)のようにそれを設定する必要があります。

実際にReturn(course => course.As<Course>())を行っていますが、には、頻度がcに格納されているため、タイトルのみが含まれています。だから、cも取得して、courseに設定してください。

+1

これは適切な答えです。コードには賢明です。 '.With'を' .Return'に置き換えて、他の 'Return'呼び出しを削除したいと思っています。 –

+0

助けてくれてありがとう、それはそれをしました。私はスパーミが何を言っているのか理解していて、クリスの提案を試み、両方を取り戻してくれました。 – Martin91