Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Dictionary<long, double?> Recommend(int user, List<int> userFilms)
- {
- recommendations.Clear();
- List<int> list = new List<int>();
- foreach(var film in userFilms)
- {
- double? x;
- List<int> pomList = new List<int>();
- ratings.TryGetValue(film, out x);
- var searchResponse = client.Search<Ratings>(s => s.Query(q => q.Match(m => m.Field(f => f.MovieId).Query(film.ToString())) && q.Range(r => r.Field(fi => fi.Rating).GreaterThanOrEquals(x))).Size(size)
- .Aggregations(a => a
- .Terms("recommend", ts => ts
- .Field(o => o.MovieId).Size(size)
- .Aggregations(aa => aa
- .Terms("userId", sa => sa
- .Field(o => o.UserId)
- )
- )
- )
- )
- );
- foreach(var doc in searchResponse.Documents)
- pomList.Add(doc.UserId);
- if (pomList.Contains(user))
- pomList.ForEach(e => list.Add(e));
- }
- list.Distinct<int>();
- foreach (var rating in ratings)
- {
- var searchResponse = client.Search<Ratings>(s => s.Query(q => q.Match(m => m.Field(f => f.MovieId).Query(rating.Key.ToString())) && q.Range(r => r.Field(fi => fi.Rating).GreaterThanOrEquals(rating.Value))).Size(size));
- foreach (var doc in searchResponse.Documents)
- {
- if (list.Contains(doc.UserId) && !recommendations.ContainsKey(rating.Key) && !userFilms.Contains(doc.MovieId))
- recommendations.Add(doc.MovieId, rating.Value);
- }
- }
- recommendations = GetTop10(recommendations);
- return recommendations;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement