public MovieSimilarity(Movie A, Movie B) { int idA = Int32.Parse(A.IMDbId.Substring(2)); int idB = Int32.Parse(B.IMDbId.Substring(2)); if (idA < idB) { this.AimdbID = A.IMDbId; this.BimdbID = B.IMDbId; } else { this.BimdbID = A.IMDbId; this.AimdbID = B.IMDbId; } combination = AimdbID + BimdbID; this.actorSimilarity = Recommender.calculateActorSimilarity(A, B); this.directorSimilarity = Recommender.calculateDirectorSimilarity(A, B); this.genreSimilarity = Recommender.calculateGenreSimilarity(A, B); }
public static List <Movie> SearchFilter(Filter filter) { try { if (filter == null) { filter = new Filter(); } var db = MongoInstance.GetDatabase; var movies = db.GetCollection <Movie>("movies"); var builder = Builders <Movie> .Filter; FilterDefinition <Movie> genreF = builder.Empty; FilterDefinition <Movie> actorsF = builder.Empty; FilterDefinition <Movie> directorsF = builder.Empty; FilterDefinition <Movie> yearFromF = builder.Empty; FilterDefinition <Movie> yearToF = builder.Empty; FilterDefinition <Movie> runtimeFromF = builder.Empty; FilterDefinition <Movie> runtimeToF = builder.Empty; FilterDefinition <Movie> imdbRatingFromF = builder.Empty; FilterDefinition <Movie> imdbRatingToF = builder.Empty; FilterDefinition <Movie> metascoreRatingFromF = builder.Empty; FilterDefinition <Movie> metascoreRatingToF = builder.Empty; FilterDefinition <Movie> tomatoRatingFromF = builder.Empty; FilterDefinition <Movie> tomatoRatingToF = builder.Empty; FilterDefinition <Movie> fbSharesFromF = builder.Empty; FilterDefinition <Movie> fbSharesToF = builder.Empty; FilterDefinition <Movie> fbLikesFromF = builder.Empty; FilterDefinition <Movie> fbLikesToF = builder.Empty; //IList<FilterDefinition<Movie>> dbFilters = new List<FilterDefinition<Movie>>(); //dbFilters.Add(genreF = builder.Empty, ); //za genre, actor i director bi mogle filter fje iz Recommendera? if (filter.Genres != null) { genreF = Recommender.GenresFilter(filter.Genres); } if (filter.Actors != null) { actorsF = Recommender.ActorsFilter(filter.Actors); } if (filter.Directors != null) { directorsF = Recommender.DirectorsFilter(filter.Directors); } if (filter.YearFrom != null) { //yearFromF = builder.Where(x => x.ReleaseDate.Value.Year >= filter.YearFrom); yearFromF = builder.Gt("ReleaseDate", new DateTime(filter.YearFrom.Value, 1, 1)); } if (filter.YearTo != null) { yearToF = builder.Lt("ReleaseDate", new DateTime(filter.YearTo.Value, 1, 1)); } if (filter.RuntimeFrom != null) { runtimeFromF = builder.Gt("Runtime", filter.RuntimeFrom); } if (filter.RuntimeTo != null) { runtimeToF = builder.Lt("Runtime", filter.RuntimeTo); } if (filter.IMDBRatingFrom != null) { imdbRatingFromF = builder.Gt("VoteAverage", filter.IMDBRatingFrom); } if (filter.IMDBRatingTo != null) { imdbRatingToF = builder.Lt("VoteAverage", filter.IMDBRatingTo); } if (filter.MetascoreRatingFrom != null) { metascoreRatingFromF = builder.Gt("Metascore", filter.MetascoreRatingFrom); } if (filter.MetascoreRatingTo != null) { metascoreRatingToF = builder.Lt("Metascore", filter.MetascoreRatingTo); } if (filter.TomatoRatingFrom != null) { tomatoRatingFromF = builder.Gt("TomatoRating", filter.TomatoRatingFrom); } if (filter.TomatoRatingTo != null) { tomatoRatingToF = builder.Lt("TomatoRating", filter.TomatoRatingFrom); } if (filter.FBSharesFrom != null) { fbSharesFromF = builder.Gt("FBShares", filter.FBSharesFrom); } if (filter.FBSharesTo != null) { fbSharesToF = builder.Lt("FBShares", filter.FBSharesFrom); } if (filter.FBLikesFrom != null) { fbLikesFromF = builder.Gt("FBLikes", filter.FBLikesFrom); } if (filter.FBLikesTo != null) { fbLikesToF = builder.Lt("FBLikes", filter.FBLikesTo); } FilterDefinition <Movie> MainFilter = genreF & actorsF & directorsF & yearFromF & yearToF & runtimeFromF & runtimeToF & imdbRatingFromF & imdbRatingToF & metascoreRatingFromF & metascoreRatingToF & tomatoRatingFromF & tomatoRatingToF & fbSharesFromF & fbSharesToF & fbLikesFromF & fbLikesToF; try { return(movies.Find(MainFilter).Limit(150).ToList()); } catch (MongoDB.Driver.MongoConnectionException) { db = MongoInstance.Reconnect; movies = db.GetCollection <Movie>("movies"); return(movies.Find(MainFilter).Limit(150).ToList()); } } catch (Exception e) { return(new List <Movie>()); } }