基于redis的sorted set实现排名(Ranking)和等级玩家搜索功能。
testcase1()有方法的调用样例:
#-*- coding: utf-8 -* import redis import random # 调试开关 _DEBUG = False # 删除缓冲 BUF_SIZE = 128 def _import_func(func_name): components = func_name.split('.') if len(components) == 1: return globals()[func_name] mod = __import__(components[0]) for comp in components[1:]: mod = getattr(mod, comp) return mod class Ranking: _instances = {} def __init__(self, id, redis_inst, conf, eval_rank_cb): self.label = id self.redis = redis_inst self.conf = conf self.eval_rank_cb = eval_rank_cb @classmethod def instance(cls, label): return cls._instances[label] @classmethod def init(cls, configs, callback=None): label = configs['label'] instance = None if cls._instances.has_key(label): instance = cls._instances[label] if instance is None: conf = cls.parse_config(configs) if conf is not None: instance = cls(conf['label'], \ conf['redis'], \ conf, \ conf['eval_rank_cb']) cls._instances[label] = instance return instance def add(self, uid, **attrs): name, value = self.eval_rank_cb(**attrs) if name is not None: self.do_add(name, uid, value) else: pass def do_add(self, rank, id, value): if _DEBUG: print "[DEBUG] Ranking.do_add: rank:", rank, " id:", id, " value", value rank_len = self.conf['rank_len'] rc = self.redis.zadd(rank, value, id) len = self.redis.zcount(rank, '-inf', '+inf') if (len - BUF_SIZE) > rank_len: self.redis.zremrangebyrank(rank, 0, (len - rank_len)) if _DEBUG: len = self.redis.zcount(rank, '-inf', '+inf') print "[DEBUG] Ranking.do_add: do remove due to too long, now len =", len def get(self, rank, len, end=-1): start = end - len return self.redis.zrange(rank, start, end, withscores=True) @classmethod def parse_config(cls, configs): conf = {} conf['label'] = '' conf['redis_server'] = '' conf['redis_port'] = -1 conf['redis_db'] = '' conf['rank_len'] = 1000 if configs.has_key('redis_server'): conf['label'] = configs['label'] if configs.has_key('redis_server'): conf['redis_server'] = configs['redis_server'] if configs.has_key('redis_port'): conf['redis_port'] = int(configs['redis_port']) if configs.has_key('redis_db'): conf['redis_db'] = configs['redis_db'] if configs.has_key('rank_size'): conf['rank_len'] = int(configs['rank_size']) if configs.has_key('eval_rank_func'): conf['eval_rank_cb'] = _import_func(configs['eval_rank_func']) try: conf['redis'] = redis.StrictRedis(host=conf['redis_server'], \ port=conf['redis_port'], \ db=conf['redis_db'], \ socket_timeout=3) except Exception,e: print "Ranking.parse_config.Error:", e return None return conf # 回调接口 # 返回值格式 (rank_name, score) def testcase1_eval(**kwargs): # 为每个等级建立一个rank,rank的依据是当前时间 # 实现:搜索指定顶级的玩家列表功能 import time lv = kwargs['level'] return ('Lv%03d'%lv, time.time()) def testcase1_eval2(**kwargs): # 建立等级的rank,玩家根据级别大小排列。 lv = kwargs['level'] return ('Level', lv) def testcase1(): fifo_configs = { 'label' : 'Fifo', 'redis_server': '127.0.0.1', 'redis_port': 6379, 'redis_db': 0, 'rank_len': 20, 'eval_rank_func': 'testcase1_eval', } level_configs = { 'label' : 'Level', 'redis_server': '127.0.0.1', 'redis_port': 6379, 'redis_db': 0, 'rank_len': 20, 'eval_rank_func': 'testcase1_eval2', } Ranking.init(fifo_configs) Ranking.init(level_configs) level_instance = Ranking.instance('Level') fifo_instance = Ranking.instance('Fifo') for i in xrange(10000): uid = "uid%d" % i level = random.randint(1, 40) fifo_instance.add(uid, level=level) # 添加rank数据 level_instance.add(uid, level=level) # 添加rank数据 data = level_instance.get("Level", 20) # 获取等级最高的玩家列表(20条) print "Level:", data data = fifo_instance.get("Lv007", 20) # 获取等级为7级的玩家列表(20条) print "Level:", data if __name__ == '__main__': testcase1()
相关推荐
总之,Path Ranking Algorithm是一种非常有效的知识图谱推理方法,特别是在处理知识图谱的不完备性和预测实体间新关系方面表现出了显著的效果。随着深度学习技术的发展,未来可能会出现更多基于路径的推理方法,...
jstarcraft-rns排序预测(Ranking)和评分预测(Rating). 为相关领域的研发人员提供完整的通用设计与参考实现. 涵盖了70多种排序预测与评分预测算法,是最快最全的Java推荐与搜索引擎
- **搜索意图识别**:定义了搜索引擎应满足的具体准则,用于识别用户的搜索意图,包括要搜索的节点类型和搜索途径的节点类型。 - **相关性导向排名**:提出了一套新的评分策略,用于对所有可能的搜索意图下的匹配...
In plain, uncomplicated language, and using detailed examples to explain the key concepts, models, and algorithms in vertical search ranking, Relevance Ranking for Vertical Search Engines teaches ...
文章报告了在两个数据集上进行的实验结果,表明改进后的Ranking SVM(称为Ranking SVM for IR)在文档检索任务上的表现优于传统的Ranking SVM和其他现有方法。这些结果证明了对Ranking SVM进行适应性修改的有效性。 ...
two different methods, including the SVM-based and RankingSVM-based methods, are presented to learn the mod-els with different example creation processes from the training set. Finally, the potential...
本篇文章将详细解析一个名为"ranking.zip"的压缩包,它包含了一个仿微信运动排行榜的HTML小程序的源代码,主要由四个核心文件组成:main.js、main.json、main.wxml和main.wxss。这四个文件是微信小程序开发中的基础...
如果您需要该版本,请转到以下位置进行浏览和下载:,swufe-ccf_show_ranking 是一个,用于在论文搜索结果页面显示会议/期刊等级。支持在(中文)、、、、 、、上显示(西南财经大学)等级支持在、 Springer、 DBLP、...
MSMARCO Passage Ranking数据集的构建基于真实的用户查询,这些查询来自微软Bing搜索引擎的历史记录,确保了数据的实用性和代表性。每个查询都与一组真实的搜索结果相关联,这使得研究者可以训练模型去学习如何在...
这篇由谷歌创始人撰写的原始论文《The PageRank Citation Ranking: Bringing Order to the Web》深入探讨了这个算法的原理和应用。 PageRank的基本思想源于数学中的随机游走理论。在网页世界中,每个网页可以看作一...
专注于解决推荐领域与搜索领域的两个核心问题:排序预测(Ranking)和评分预测(Rating) 介绍 JStarCraft RNS是一个面向信息检索领域的轻量级引擎.遵循Apache 2.0协议. 专注于解决信息检索领域的基本问题:推荐与搜索. ...
WordPress原创插件:Keyword-ranking-seo 1.0 关键词排名插件 有利于seo 当用户访问网站时,该链接会随机选择一个关键词,并使用选定的搜索引擎进行搜索。
【Saliency Detection via Graph-Based Manifold Ranking】是一种在计算机视觉领域中用于图像显著性检测的方法,该方法基于图论和流形排名的概念。在2013年的CVPR(Computer Vision and Pattern Recognition)会议上...
BPR(Bayesian Personalized Ranking)是从隐式反馈中进行个性化排序的一个方法,它重点优化了推荐排序过程,而不仅仅是直接预测用户对单个项目的偏好。 隐式反馈是指用户在使用系统过程中未明确表达出偏好的信息,...
总之,Oracle 的分析函数,尤其是评级函数,为数据分析师提供了强大的分析工具,可以帮助我们更好地理解和解释数据集中的模式和趋势。熟练掌握这些函数的应用,能极大地提升数据库查询的效率和结果的准确性。