@Override public RecommendResponse recommend(RecommendQuery query, Integer maxReuslts) { productsToFilter = new ArrayList<String>(); String queryString = "*:*"; String sortCriteria = "user_count_purchased desc"; ModifiableSolrParams solrParams = new ModifiableSolrParams(); QueryResponse response = null; RecommendResponse searchResponse = new RecommendResponse(); try { String filterQueryString = RecommendationQueryUtils.buildFilterForContentBasedFiltering(contentFilter); if (query.getProductIds() != null && query.getProductIds().size() > 0) { productsToFilter.addAll(query.getProductIds()); } if (query.getUser() != null) { if (alreadyBoughtProducts != null) { productsToFilter.addAll(alreadyBoughtProducts); } } if (productsToFilter != null && productsToFilter.size() > 0) { if (filterQueryString.length() > 0) { filterQueryString += " OR "; } filterQueryString += RecommendationQueryUtils.buildFilterForAlreadyBoughtProducts(productsToFilter); } solrParams.set("q", queryString); solrParams.set("fq", filterQueryString); solrParams.set("sort", sortCriteria); solrParams.set("rows", maxReuslts); response = SolrServiceContainer.getInstance() .getRecommendService() .getSolrServer() .query(solrParams); // fill response object List<String> extractedRecommendations = RecommendationQueryUtils.extractRecommendationIds( response.getBeans(CustomerAction.class)); searchResponse.setResultItems(extractedRecommendations); searchResponse.setElapsedTime(response.getElapsedTime()); SolrDocumentList docResults = response.getResults(); searchResponse.setNumFound(docResults.getNumFound()); } catch (SolrServerException e) { e.printStackTrace(); searchResponse.setNumFound(0); searchResponse.setResultItems(new ArrayList<String>()); searchResponse.setElapsedTime(-1); } return searchResponse; }
@Override public RecommendResponse recommend(RecommendQuery query, Integer maxReuslts) { ModifiableSolrParams solrParams = new ModifiableSolrParams(); QueryResponse response = null; RecommendResponse searchResponse = new RecommendResponse(); long step0ElapsedTime = 0; long step1ElapsedTime; List<String> recommendations = new ArrayList<String>(); try { // STEP 0 - get products from a user if (query.getUser() != null) { if (query.getProductIds() == null || query.getProductIds().size() == 0) { if (alreadyBoughtProducts != null) { query.setProductIds(alreadyBoughtProducts); } else { } } } solrParams = getInteractionsFromMeAndUSersThatILikedOrCommented(query.getUser()); response = SolrServiceContainer.getInstance() .getSocialActionService() .getSolrServer() .query(solrParams); step1ElapsedTime = response.getElapsedTime(); List<SocialAction> socialUsers = response.getBeans(SocialAction.class); if (socialUsers.size() == 0) { searchResponse.setNumFound(0); searchResponse.setResultItems(recommendations); searchResponse.setElapsedTime(-1); return searchResponse; } SocialAction currentUserInteractions = socialUsers.get(0); if (currentUserInteractions.getUserId().equals(query.getUser())) { socialUsers.remove(0); } else { currentUserInteractions = null; } final Map<String, Integer> userInteractionMap = new HashMap<String, Integer>(); if (currentUserInteractions != null) { List<String> usersThatPostedASnapshopToMe = currentUserInteractions.getUsersThatPostedASnapshopToMe(); if (usersThatPostedASnapshopToMe != null) { fillInteractions(usersThatPostedASnapshopToMe, userInteractionMap); } } for (SocialAction socialUser : socialUsers) { Integer userInteraction = userInteractionMap.get(socialUser.getUserId()); if (userInteraction == null) { userInteraction = 0; } if (socialUser.getUsersThatPostedASnapshopToMe() != null) { userInteraction += Collections.frequency(socialUser.getUsersThatPostedASnapshopToMe(), query.getUser()); } userInteractionMap.put(socialUser.getUserId(), userInteraction); } Comparator<String> interactionCountComparator = new Comparator<String>() { @Override public int compare(String a, String b) { if (userInteractionMap.get(a) > userInteractionMap.get(b)) { return -1; } else if (userInteractionMap.get(a).equals(userInteractionMap.get(b))) { return 0; } else { return 1; } } }; TreeMap<String, Integer> sorted_map = new TreeMap<String, Integer>(interactionCountComparator); sorted_map.putAll(userInteractionMap); solrParams = getSTEP2Params(query, maxReuslts, sorted_map); // TODO Facet for confidence value response = SolrServiceContainer.getInstance().getResourceService().getSolrServer().query(solrParams); // fill response object List<Resource> beans = response.getBeans(Resource.class); searchResponse.setResultItems(RecommendationQueryUtils.extractRecommendationIds(beans)); searchResponse.setElapsedTime( step0ElapsedTime + step1ElapsedTime + response.getElapsedTime()); SolrDocumentList docResults = response.getResults(); searchResponse.setNumFound(docResults.getNumFound()); } catch (Exception e) { System.out.println(solrParams); e.printStackTrace(); searchResponse.setNumFound(0); searchResponse.setResultItems(recommendations); searchResponse.setElapsedTime(-1); } return searchResponse; }