Files
fun-rec/codes/news_rec_server/recprocess/offline.py
T
2021-12-04 10:52:00 +08:00

70 lines
2.3 KiB
Python

import sys
sys.path.append("../")
from dao.mongo_server import MongoServer
from dao.redis_server import RedisServer
from recall.hot_recall import HotRecall
from datetime import datetime
# 这个类是用来实现离线推荐流程的,给每个用户都存储一个倒排索引列表
# 对于热门页的内容,初始化的时候每个用户都是一样的
# 这个类的实例会在处理完物料之后,生成当前最新的用户推荐列表,热门列表,及冷启动内容模板
class OfflineServer(object):
def __init__(self):
self.redis_mongo_collection = MongoServer().get_redis_mongo_collection()
self.reclist_redis = RedisServer().get_reclist_redis()
self.hot_recall = HotRecall()
def hot_list_to_redis(self):
"""热门页面,初始化的时候每个用户都是同样的内容
"""
self.hot_recall.get_hot_rec_list()
print("a hot rec list are saved into redis.....")
def rec_list_to_redis(self):
"""个性化推荐列表,千人千面
"""
pass
def cold_start_template_to_redis(self):
"""冷启动列表模板
"""
pass
def _get_user_id_list(self):
"""获取所有注册用户的id
"""
pass
def _get_news_id_list(self):
"""获取所有新闻id
"""
# 获取所有数据的news_id,
# 暴力获取,直接遍历整个数据库,得到所有新闻的id
# TODO 应该存在优化方法可以通过查询的方式只返回new_id字段
news_id_list = []
for item in self.redis_mongo_collection.find():
news_id_list.append(item["news_id"])
return news_id_list
def test(self):
"""给redis中加入一个倒排索引用于测试
"""
news_id_list = self._get_news_id_list()
value_list = [i for i in range(len(news_id_list))]
for news_id, val in zip(news_id_list, value_list):
# print({news_id: val})
self.reclist_redis.zadd("rec_list", {news_id: val}, nx=True)
print("a sorted news_ids are saved into redis.")
if __name__ == "__main__":
# 生成统一的,用于测试的倒排索引
# TODO 待测试
offline_server = OfflineServer().test()
offline_server = OfflineServer().hot_list_to_redis()