/*
* Seldon -- open source prediction engine
* =======================================
*
* Copyright 2011-2015 Seldon Technologies Ltd and Rummble Ltd (http://www.seldon.io/)
*
* ********************************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* ********************************************************************************************
*/
package io.seldon.memcache;
import io.seldon.recommendation.CFAlgorithm;
import io.seldon.util.CollectionTools;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
public class MemCacheKeys {
private enum keys {
UserTrustNetwork, ContentTrustNetwork, RummbleClient, SemanticVector, RecommendationNetwork,
ConsumerBean,ItemBean,ItemsBeanNew,ItemSimilarityGraphBean,OpinionBean,OpinionsBean,RecommendationsBean,TokenBean,UserBean,UsersBean,UsterTrustGraphBean,DimensionBean, ActionBean,
ActionsBean,ItemActionsBean,UserInternalId,ItemInternalId,UserClientId,ItemClientId,DimensionsBean,ItemsBeanByNameNew,ItemAttrType,ItemType,ActionType,ItemDimensions,InternalActionsBean,
FacebookFriends,FacebookLikes,DBPediaSearch,RecommendedUsers,
DimensionByItemType,DemographicBean,DBPediaHits, ItemSemanticAttribute, CooccurenceNetwork,
ClusterCountForItems,ClustersForUser,TopClusterCounts,TopGlobalClusterCounts,TopClusterCountsForDimension,TopClusterCountsForTag,
WebHitsForUser,ClusterCount,ClusterCountDecay,SharingRecommendation,ActionHistory,
RankedItems,ABTesting,DynamicParameters,ShortTermClusters,
SharingRecommendationsForItemSet, RecommendedItems, ExcludedItemsForRecommendations, RecommendationUUIDNew, RecommendationUUIDDim,
RecentRecsForUsers, RecentItemsJSON, RecentItemsDimJSON, RecentItemsWithTagsJSON, ItemCluster, RecommendationUserMaxCounter, DBPediaHasBeenSearched, SocialPredictRecommendedItems,
DimensionForAttrName,ItemTags,UserTags,ElphPrediction, itemRecommender, itemSimilarity, TagsForItem, TagItemCount, TagsItemCounts, SimilarUsers, InteractionBean, InteractionsBean,
FacebookUsersAlgRecKey, FacebookUsersRecKey, FacebookUsersDecayFunctionKey, SharingRecommendationForKeywords, MostPopularItems, PopularItemsJSON, ActionFullHistory, ExplicitItemsIncluder,
ItemAttrAndDims, ItemBeanLocale, StaticRecommendations, Explanations
};
public static String getUserTrustNetworkKey(String client,long user,int type) {
return "" + keys.UserTrustNetwork + ":" + client + ":" + user + ":" + type;
}
public static String getRecommendationsKey(String client,long user,int type) {
return "" + keys.RecommendationNetwork + ":" + client + ":" + type + ":" + user;
}
public static String getContentTrustNetworkKey(String client,long user,int type) {
return "" + keys.ContentTrustNetwork + ":" + client + ":" + user + ":" + type;
}
public static String getRummbleClientKey(String name) {
return "" + keys.RummbleClient + ":" + name;
}
public static String getSemanticVectorKey(String client,String prefix,long user) {
return "" + keys.SemanticVector + ":" + client + ":" + prefix + ":" + user;
}
public static String getConsumerBeanKey(String client,String key) {
return "" + keys.ConsumerBean + ":" + client + ":" + key;
}
public static String getItemsBeanKey(String client, boolean full,String sort, int dimension) {
return "" + keys.ItemsBeanNew + ":" + client + ":" + full + ":" + sort + ":" + dimension;
}
public static String getItemsBeanKey(String client, String keywords, boolean full) {
return "" + keys.ItemsBeanNew + ":" + client + ":" + keywords + ":" + full;
}
public static String getItemBeanKey(String client, String id, boolean full) {
return "" + keys.ItemsBeanNew + ":" + client + ":" + id + ":" + full;
}
public static String getItemBeanKeyWithLocale(String client, String id, boolean full,String locale) {
return "" + keys.ItemBeanLocale + ":" + client + ":" + id + ":" + full+":"+locale;
}
public static String getItemSimilarityGraphBeanKey(String client, String id) {
return "" + keys.ItemSimilarityGraphBean + ":" + client + ":" + id ;
}
public static String getTokenBeanKey(String key) {
return "" + keys.TokenBean + ":" + key;
}
public static String getUserBeanKey(String client,String id, boolean full) {
return "" + keys.UserBean + ":" + client + ":" + id + ":" + full;
}
public static String getUsersBeanKey(String client,boolean full) {
return "" + keys.UsersBean + ":" + client + ":" + full;
}
public static String getUserTrustGraphBeanKey(String client,String id) {
return "" + keys.UsterTrustGraphBean + ":" + client + ":" + id;
}
public static String getRecommendationsBeanKey(String client, CFAlgorithm algorithm,String id, String keywords, boolean full, int dimension) {
return "" + keys.RecommendationsBean + ":" + client + ":" +algorithm.toString()+":"+ id + ":" + keywords + ":" + full + ":" + dimension;
}
public static String getRecommendationsBeanKey(String client, CFAlgorithm algorithm,String id, Integer type,int dimensionId, boolean full) {
return "" + keys.RecommendationsBean + ":" + client + ":" +algorithm.toString()+":"+ id + ":" + type + ":" + dimensionId + ":" + full;
}
public static String getRecommendedItemsKey(String client, CFAlgorithm algorithm, String userId, int typeId, int dimensionId, boolean full) {
return "" + keys.RecommendedItems + ":" + client + ":" +algorithm.toString()+":"+ userId + ":" + typeId + ":" + dimensionId + ":" + full;
}
public static String getRecommendedItemsPerAlgKey(String client, String algName, Long user, int dimensionId){
return "" + keys.RecommendedItems + ":" + client + ":" + algName + ":"+ user.toString() + ":" + dimensionId;
}
public static String getDimensionBeanKey(String client,int id) {
return "" + keys.DimensionBean + ":" + client + ":" + id;
}
public static String getDimensionBeanKey(String client,int attr,int val) {
return "" + keys.DimensionBean + ":" + client + ":" + attr + ":" + val;
}
public static String getDimensionBeanKey(String client,String attrName, String valName) {
return "" + keys.DimensionBean + ":" + client + ":" + attrName + ":" + valName;
}
public static String getDemographicBeanKey(String client,String attrName, String valName) {
return "" + keys.DemographicBean + ":" + client + ":" + attrName + ":" + valName;
}
public static String getActionBeanKey(String client,long actionId,boolean full, boolean ext) {
return "" + keys.ActionBean + ":" + client + ":" + ext + ":" + actionId;
}
public static String getUserActionsBeanKey(String client,String userId,boolean full,boolean ext) {
return "" + keys.ActionsBean + ":" + client + ":" + ":" + full + ":" + ext + ":" + userId;
}
public static String getUserItemActionBeanKey(String client,String userId,String itemId,boolean full, boolean ext) {
return "" + keys.ActionsBean + ":" + client + ":" + userId + ":" + itemId + ":" + full + ":" + ext;
}
public static String getItemActionsBeanKey(String client,String itemId,boolean full, boolean ext) {
return "" + keys.ItemActionsBean + ":" + client + ":" + full + ":" + ext + ":" + itemId;
}
public static String getUserInternalId(String client,String id) {
return "" + keys.UserInternalId + ":" + client + ":" + id;
}
public static String getItemInternalId(String client,String id) {
return "" + keys.ItemInternalId + ":" + client + ":" + id;
}
public static String getUserClientId(String client,long id) {
return "" + keys.UserClientId + ":" + client + ":" + id;
}
public static String getItemClientId(String client,long id) {
return "" + keys.ItemClientId + ":" + client + ":" + id;
}
public static String getDimensionsBeanKey(String client) {
return "" + keys.DimensionsBean + ":" + client;
}
public static String getItemsBeanKeyByName(String client, boolean full, String name, int dimension) {
return "" + keys.ItemsBeanByNameNew + ":" + client + ":" + full + ":" + name + ":" + dimension;
}
public static String getItemAttrType(String client, int itemType, String name) {
return "" + keys.ItemAttrType + ":" + client + ":" + itemType + ":" + name;
}
public static String getItemTypeByName(String client, String name) {
return "" + keys.ItemType + ":" + client + ":" + name;
}
public static String getItemTypeById(String client, int id) {
return "" + keys.ItemType + ":" + client + ":" + id;
}
public static String getActionTypeByName(String client, String name) {
return "" + keys.ActionType + ":" + client + ":" + name;
}
public static String getActionTypeById(String client, int id) {
return "" + keys.ActionType + ":" + client + ":" + id;
}
public static String getItemDimensions(String client, long itemId) {
return "" + keys.ItemDimensions + ":" + client + ":" + itemId;
}
public static String getItemCluster(String client, long itemId) {
return "" + keys.ItemCluster + ":" + client + ":" + itemId;
}
public static String getInternalUserItemActionBeanKey(String client, long userId, long itemId, boolean full, boolean ext) {
return "" + keys.InternalActionsBean + ":" + client + ":" + userId + ":" + itemId + ":" + full + ":" + ext;
}
public static String getDimensionBeanByItemTypeKey(String client,int itemType) {
return "" + keys.DimensionByItemType + ":" + client + ":" + itemType;
}
public static String getFacebookFriends(String client,long userId)
{
return "" + keys.FacebookFriends + ":" + client + ":" + userId;
}
public static String getFacebookLikes(String client,long userId)
{
return "" + keys.FacebookLikes + ":" + client + ":" + userId;
}
public static String getDBPediaHits(String client,String query)
{
return "" + keys.DBPediaHits + ":" + client + ":" + query;
}
public static String getRecommendedUsers(String client, String userId, String itemId, String linkType, String keywords) {
return "" + keys.RecommendedUsers + ":" + client + ":" + userId + ":" + itemId + ":" + linkType + ":" + keywords;
}
public static String getUsersBeanKey(String client, boolean full,String name) {
return "" + keys.UsersBean + ":" + client + ":" + full + ":" + name;
}
public static String getDemographicBeanKey(String client,int id) {
return "" + keys.DemographicBean + ":" + client + ":" + id;
}
public static String getActionType(String client, int id) {
return "" + keys.ActionType + ":" + client + ":" + id;
}
public static String getActionTypes(String client) {
return "" + keys.ActionType + ":" + client;
}
public static String getItemTypes(String client) {
return "" + keys.ItemType + ":" + client;
}
public static String getItemSemanticAttributes(String client, long itemId) {
return "" + keys.ItemSemanticAttribute + ":" + client + ":" + itemId;
}
public static String getCooccurenceNetworkKey(String client, long user) {
return "" + keys.CooccurenceNetwork + ":" + client + ":" + user;
}
public static String getClusterCountForItems(String client,int clusterId,List<Long> items,long version)
{
ArrayList<Long> itemKeys = new ArrayList<>(items);
Collections.sort(itemKeys); // to provide consistent order
StringBuffer b = new StringBuffer(""+keys.ClusterCountForItems);
b.append(":");
b.append(client);
b.append(":");
b.append(clusterId);
b.append(":");
b.append(version);
for(Long item : itemKeys)
b.append(":").append(item);
return b.toString();
}
public static String getClustersForUser(String client,long userId)
{
return ""+keys.ClustersForUser+":"+client+":"+userId;
}
public static String getShortTermClustersForUser(String client,long userId)
{
return ""+keys.ShortTermClusters+":"+client+":"+userId;
}
public static String getWebHitsForUser(String client,long userId,String linkType)
{
return ""+keys.WebHitsForUser+":"+client+":"+userId+":"+linkType;
}
public static String getClusterCountKey(String client,long clusterId,long itemId,long clusterTimestamp)
{
return ""+keys.ClusterCount+":"+client+":"+clusterId+":"+itemId+":"+clusterTimestamp;
}
public static String getClusterCountDecayKey(String client,long clusterId,long itemId,long clusterTimestamp)
{
return ""+keys.ClusterCountDecay+":"+client+":"+clusterId+":"+itemId+":"+clusterTimestamp;
}
public static String getSharingRecommendationKey(String client,long userId,long itemId,String linkType)
{
return ""+keys.SharingRecommendation+":"+client+":"+userId+":"+itemId+":"+linkType;
}
public static String getSharingRecommendationKey(String client,long userId,List<Long> items)
{
ArrayList<Long> itemKeys = new ArrayList<>(items);
Collections.sort(itemKeys);
return ""+keys.SharingRecommendation+":"+client+":"+userId+":"+CollectionTools.join(itemKeys, ",");
}
public static String getActionHistory(String client,long userId)
{
return ""+keys.ActionHistory+":"+client+":"+userId;
}
public static String getActionFullHistory(String client,long userId)
{
return ""+keys.ActionFullHistory+":"+client+":"+userId;
}
public static String getRankedItemsKey(String client,long cfalgorithm, String userId,List<String> items)
{
ArrayList<String> itemKeys = new ArrayList<>(items);
Collections.sort(itemKeys);
return ""+keys.RankedItems+":"+client+":" + cfalgorithm + ":"+userId+":"+CollectionTools.join(itemKeys, ",");
}
public static String getABTestingUser(String consumer, String clientUserId, String testKey) {
return ""+keys.ABTesting+":"+consumer+":"+testKey+":"+clientUserId;
}
public static String getDynamicParameters(String consumer) {
return ""+keys.DynamicParameters+":"+consumer;
}
public static String getSharingRecommendationsForItemSetKey(String client,long userId)
{
return ""+keys.SharingRecommendationsForItemSet.name()+":"+client+":"+userId;
}
public static String getTopClusterCounts(String client,int clusterId,int limit)
{
return ""+keys.TopClusterCounts.name()+":"+client+":"+clusterId+":"+limit;
}
public static String getTopClusterCounts(String client,int limit)
{
return ""+keys.TopGlobalClusterCounts.name()+":"+client+":"+limit;
}
public static String getTopClusterCountsForDimension(String client,int clusterId,Set<Integer> dimensions,int limit)
{
return ""+keys.TopClusterCounts.name()+":"+client+":"+clusterId+":"+StringUtils.join(dimensions, ",")+":"+limit;
}
public static String getTopClusterCountsForTwoDimensions(String client,int clusterId,Set<Integer> dimensions,int dim2,int limit)
{
return ""+keys.TopClusterCounts.name()+":"+client+":"+clusterId+":"+StringUtils.join(dimensions, ",")+":"+dim2+":"+limit;
}
public static String getTopClusterCountsForDimensionAlg(String client,String alg,int clusterId,Set<Integer> dimensions,int limit)
{
return ""+keys.TopClusterCounts.name()+":"+client+":"+alg+":"+clusterId+":"+StringUtils.join(dimensions, ",")+":"+limit;
}
public static String getTopClusterCountsForTagAndDimension(String client,String tag,int tagAttrId,Set<Integer> dimensions,int limit)
{
return ""+keys.TopClusterCountsForTag.name()+":"+client+":"+tag+":"+tagAttrId+":"+StringUtils.join(dimensions, ",")+":"+limit;
}
public static String getTopClusterCountsForTagAndTwoDimensions(String client,String tag,int tagAttrId,Set<Integer> dimensions,int dimension2,int limit)
{
return ""+keys.TopClusterCountsForTag.name()+":"+client+":"+tag+":"+tagAttrId+":"+StringUtils.join(dimensions, ",")+":"+dimension2+":"+limit;
}
public static String getTopClusterCountsForTag(String client,String tag,int tagAttrId,int limit)
{
return ""+keys.TopClusterCountsForTag.name()+":"+client+":"+tag+":"+tagAttrId+":"+limit;
}
public static String getTopClusterCountsForDimension(String client,Set<Integer> dimensions,int limit)
{
return ""+keys.TopGlobalClusterCounts.name()+":"+client+":"+StringUtils.join(dimensions, ",")+":"+limit;
}
public static String getTopClusterCountsForTwoDimensions(String client,Set<Integer> dimensions,int dimension2,int limit)
{
return ""+keys.TopGlobalClusterCounts.name()+":"+client+":"+StringUtils.join(dimensions, ",")+":"+dimension2+":"+limit;
}
public static String getExcludedItemsForRecommendations(String client,String userId)
{
return ""+keys.ExcludedItemsForRecommendations.name()+":"+client+":"+userId;
}
public static String getRecommendationListUUID(String client,String userId,int counter, String recTag)
{
return ""+keys.RecommendationUUIDNew.name()+":"+client+":"+userId+":"+counter + ":" + recTag;
}
public static String getRecommendationListUUIDWithDimension(String client,int dimension, String userId,int counter)
{
return ""+keys.RecommendationUUIDDim.name()+":"+client+":"+userId+":"+dimension+":"+counter;
}
public static String getRecommendationListUserCounter(String client,Set<Integer> dimensions, String userId)
{
return ""+keys.RecommendationUserMaxCounter.name()+":"+client+":"+userId+":"+StringUtils.join(dimensions, ",");
}
public static String getRecentRecsForUser(String client,String userId,Set<Integer> dimensions)
{
return ""+keys.RecentRecsForUsers.name()+":"+client+":"+userId+":"+StringUtils.join(dimensions, ",");
}
public static String getRecentItems(String client,Set<Integer> dimensions,int size)
{
return ""+keys.RecentItemsJSON.name()+":"+client+":"+StringUtils.join(dimensions, ",")+":"+size;
}
public static String getRecentItemsInDimension(String client,Set<Integer> dimensions,int dimId,int size)
{
return ""+keys.RecentItemsDimJSON.name()+":"+client+":"+StringUtils.join(dimensions, ",")+":"+dimId+":"+size;
}
public static String getRecentItemsWithTags(String client,int tagAttrId,int tagKey,int size)
{
return ""+keys.RecentItemsWithTagsJSON.name()+":"+client+":"+":"+tagAttrId+":"+tagKey+":"+size;
}
public static String getPopularItems(String client, Set<Integer> dimensions, int size){
return ""+keys.PopularItemsJSON.name()+":"+client+":"+StringUtils.join(dimensions, ",")+":"+size;
}
public static String getDbpediaHasBeenSearched(String client,long itemId)
{
return ""+keys.DBPediaHasBeenSearched.name()+":"+client+":"+itemId;
}
public static String getSocialPredictRecommendedItems(String client,long userId,long itemsHashCode)
{
return ""+keys.SocialPredictRecommendedItems.name()+":"+client+":"+userId+":"+itemsHashCode;
}
public static String getDimensionForAttrName(String client,long itemId,String category)
{
return ""+keys.DimensionForAttrName+":"+client+":"+itemId+":"+category;
}
public static String getItemTags(String client,int numItems,int dimension)
{
return ""+keys.ItemTags.name()+":"+client+":"+numItems+":"+dimension;
}
public static String getUserTags(String client,long userId)
{
return ""+keys.UserTags.name()+":"+client+":"+userId;
}
public static String getElphPrediction(String client,List<Long> recentItems)
{
return ""+keys.ElphPrediction+":"+client+":"+CollectionTools.join(recentItems, ",");
}
public static String getItemRecommender(String client,long userId,int dimension,int max)
{
return ""+keys.itemRecommender+":"+client+":"+userId+":"+dimension+":"+max;
}
public static String getItemSimilarity(String client,long itemId,Set<Integer> dimensions,int max)
{
return ""+keys.itemSimilarity+":"+client+":"+itemId+":"+StringUtils.join(dimensions, ",")+":"+max;
}
public static String getItemTags(String client,long itemId,int attrId)
{
return ""+keys.TagsForItem+":"+client+":"+itemId+":"+attrId;
}
public static String getTagsItemCounts(String client,Set<String> tags,int dimension)
{
ArrayList<String> tlist = new ArrayList<>(tags);
Collections.sort(tlist);
String normalizedTagKey = CollectionTools.join(tlist, ":");
return ""+keys.TagsItemCounts+":"+client+":"+dimension+":"+ normalizedTagKey;
}
public static String getTagItemCount(String client,String tag,int dimension)
{
return ""+keys.TagItemCount+":"+client+":"+dimension+":"+tag;
}
public static String getSimilarUsers(String client,long userId,int type,int filterType)
{
return ""+keys.SimilarUsers+":"+client+":"+userId+":"+type+":"+filterType;
}
public static String getSharingRecommendationForKeywords(String client,long userId,List<String> keywords)
{
ArrayList<String> keywordSet = new ArrayList<>(keywords);
Collections.sort(keywordSet);
return ""+keys.SharingRecommendationForKeywords+":"+client+":"+userId+CollectionTools.join(keywordSet, ",");
}
public static String getInteractionBeanKey(String client, String user1, String user2, int type, int subType) {
return ""+ keys.InteractionBean+":"+user1+":"+user2+":"+type+":"+subType;
}
public static String getInteractionsBeanKey(String client, String user1, int type){
return ""+ keys.InteractionsBean+":"+user1 +":"+type;
}
public static String getFacebookUsersAlgRecKey(String service, String client, String algName, String userId, int algParams) {
return "" + keys.FacebookUsersAlgRecKey+":"+service+":"+client+":"+algName+":"+userId+":"+algParams;
}
public static String getFacebookUsersRecKey(String service, String client, String userId, Integer strategyCode, int algParamsCode) {
return "" + keys.FacebookUsersRecKey + ":" + service + ":" + client + ":" + userId + ":" + strategyCode + ":" + algParamsCode;
}
public static String getFacebookUsersDecayFunctionKey(String service, String client, String userId, String decayFunctionType) {
return "" + keys.FacebookUsersDecayFunctionKey + ":" + service + ":" + client + ":" + userId + ":" + decayFunctionType;
}
public static String getFacebookUsersImpressionsKey(String decayFunctionType, String service, String client, String userId) {
return "" + keys.FacebookUsersDecayFunctionKey + ":" + decayFunctionType + ":" + service + ":" + client + ":" + userId;
}
public static String getMostPopularItems(String client,int dimension)
{
return ""+keys.MostPopularItems+":"+client+":"+dimension;
}
public static String getMostPopularItems(String client)
{
return ""+keys.MostPopularItems+":"+client;
}
public static String getExplicitItemsIncluderKey(String client,Set<Long> items)
{
return ""+keys.ExplicitItemsIncluder+":"+client+":"+items.hashCode();
}
public static String getItemAttrDims(String client,long itemId)
{
return ""+keys.ItemAttrAndDims+":"+client+":"+itemId;
}
public static String getStaticRecommendationsKey(String client,long userId,Set<Integer> dimensions,int max)
{
return ""+keys.StaticRecommendations+":"+client+":"+userId+":"+StringUtils.join(dimensions, ",")+":"+max;
}
public static String getExplanationsKey(String clientName, String algKey, String locale)
{
return ""+keys.Explanations+":"+clientName+":"+algKey+":"+locale;
}
}