私は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;
これは適切な答えです。コードには賢明です。 '.With'を' .Return'に置き換えて、他の 'Return'呼び出しを削除したいと思っています。 –
助けてくれてありがとう、それはそれをしました。私はスパーミが何を言っているのか理解していて、クリスの提案を試み、両方を取り戻してくれました。 – Martin91