@Override public long[] getUserNeighborhood(long userID) throws TasteException { return neighborhoodCache.get(userID); }
@Override public float inferPreference(long userID, long itemID) throws TasteException { return averagePreferenceValue.get(userID); }
@Override public long[] getUserNeighborhood(long userID) throws TasteException { return neighborhoodCache.get(userID); }
@Override public float inferPreference(long userID, long itemID) throws TasteException { return averagePreferenceValue.get(userID); }
@Override public long[] getUserNeighborhood(long userID) throws TasteException { return neighborhoodCache.get(userID); }
@Override public float inferPreference(long userID, long itemID) throws TasteException { return averagePreferenceValue.get(userID); }
@Override public float estimatePreference(long userID, long itemID) throws TasteException { return estimatedPrefCache.get(new LongPair(userID, itemID)); }
@Override public float estimatePreference(long userID, long itemID) throws TasteException { return estimatedPrefCache.get(new LongPair(userID, itemID)); }
@Override public float estimatePreference(long userID, long itemID) throws TasteException { return estimatedPrefCache.get(new LongPair(userID, itemID)); }
@Override public double itemSimilarity(long itemID1, long itemID2) throws TasteException { LongPair key = itemID1 < itemID2 ? new LongPair(itemID1, itemID2) : new LongPair(itemID2, itemID1); return similarityCache.get(key); }
@Override public double itemSimilarity(long itemID1, long itemID2) throws TasteException { LongPair key = itemID1 < itemID2 ? new LongPair(itemID1, itemID2) : new LongPair(itemID2, itemID1); return similarityCache.get(key); }
@Override public double itemSimilarity(long itemID1, long itemID2) throws TasteException { LongPair key = itemID1 < itemID2 ? new LongPair(itemID1, itemID2) : new LongPair(itemID2, itemID1); return similarityCache.get(key); }
@Override public double userSimilarity(long userID1, long userID2) throws TasteException { LongPair key = userID1 < userID2 ? new LongPair(userID1, userID2) : new LongPair(userID2, userID1); return similarityCache.get(key); }
@Override public double userSimilarity(long userID1, long userID2) throws TasteException { LongPair key = userID1 < userID2 ? new LongPair(userID1, userID2) : new LongPair(userID2, userID1); return similarityCache.get(key); }
@Override public double userSimilarity(long userID1, long userID2) throws TasteException { LongPair key = userID1 < userID2 ? new LongPair(userID1, userID2) : new LongPair(userID2, userID1); return similarityCache.get(key); }
@Override public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException { Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1"); synchronized (maxHowMany) { if (howMany > maxHowMany[0]) { maxHowMany[0] = howMany; } } // Special case, avoid caching an anonymous user if (userID == PlusAnonymousUserDataModel.TEMP_USER_ID) { return recommendationsRetriever.get(PlusAnonymousUserDataModel.TEMP_USER_ID).getItems(); } setCurrentRescorer(rescorer); Recommendations recommendations = recommendationCache.get(userID); if (recommendations.getItems().size() < howMany && !recommendations.isNoMoreRecommendableItems()) { clear(userID); recommendations = recommendationCache.get(userID); if (recommendations.getItems().size() < howMany) { recommendations.setNoMoreRecommendableItems(true); } } List<RecommendedItem> recommendedItems = recommendations.getItems(); return recommendedItems.size() > howMany ? recommendedItems.subList(0, howMany) : recommendedItems; }
@Override public List<RecommendedItem> recommend(long userID, int howMany,IDRescorer rescorer, boolean includeKnownItems) throws TasteException { Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1"); synchronized (maxHowMany) { if (howMany > maxHowMany[0]) { maxHowMany[0] = howMany; } } // Special case, avoid caching an anonymous user if (userID == PlusAnonymousUserDataModel.TEMP_USER_ID) { return recommendationsRetriever.get(PlusAnonymousUserDataModel.TEMP_USER_ID).getItems(); } setCurrentRescorer(rescorer); setCurrentlyIncludeKnownItems(includeKnownItems); Recommendations recommendations = recommendationCache.get(userID); if (recommendations.getItems().size() < howMany && !recommendations.isNoMoreRecommendableItems()) { clear(userID); recommendations = recommendationCache.get(userID); if (recommendations.getItems().size() < howMany) { recommendations.setNoMoreRecommendableItems(true); } } List<RecommendedItem> recommendedItems = recommendations.getItems(); return recommendedItems.size() > howMany ? recommendedItems.subList(0, howMany) : recommendedItems; }
@Override public List<RecommendedItem> recommend(long userID, int howMany,IDRescorer rescorer, boolean includeKnownItems) throws TasteException { Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1"); synchronized (maxHowMany) { if (howMany > maxHowMany[0]) { maxHowMany[0] = howMany; } } // Special case, avoid caching an anonymous user if (userID == PlusAnonymousUserDataModel.TEMP_USER_ID) { return recommendationsRetriever.get(PlusAnonymousUserDataModel.TEMP_USER_ID).getItems(); } setCurrentRescorer(rescorer); setCurrentlyIncludeKnownItems(includeKnownItems); Recommendations recommendations = recommendationCache.get(userID); if (recommendations.getItems().size() < howMany && !recommendations.isNoMoreRecommendableItems()) { clear(userID); recommendations = recommendationCache.get(userID); if (recommendations.getItems().size() < howMany) { recommendations.setNoMoreRecommendableItems(true); } } List<RecommendedItem> recommendedItems = recommendations.getItems(); return recommendedItems.size() > howMany ? recommendedItems.subList(0, howMany) : recommendedItems; }
@Test public void testLotsOfGets() throws TasteException { Retriever<Object,Object> retriever = new IdentityRetriever(); Cache<Object,Object> cache = new Cache<Object,Object>(retriever, 1000); for (int i = 0; i < 1000000; i++) { assertEquals(i, cache.get(i)); } }
@Test public void testMixedUsage() throws TasteException { Random random = RandomUtils.getRandom(); Retriever<Object,Object> retriever = new IdentityRetriever(); Cache<Object,Object> cache = new Cache<Object,Object>(retriever, 1000); for (int i = 0; i < 1000000; i++) { double r = random.nextDouble(); if (r < 0.01) { cache.clear(); } else if (r < 0.1) { cache.remove(r - 100); } else { assertEquals(i, cache.get(i)); } } }