Commit 18202504 authored by 段英荣's avatar 段英荣

Merge branch 'recomment_pictorial' into 'master'

Recomment pictorial

See merge request !431
parents 2670eaf9 aa8c7e81
...@@ -13,6 +13,7 @@ from libs.es import ESPerform ...@@ -13,6 +13,7 @@ from libs.es import ESPerform
from search.utils.group import GroupUtils from search.utils.group import GroupUtils
from search.utils.common import GroupSortTypes from search.utils.common import GroupSortTypes
from libs.es import ESPerform from libs.es import ESPerform
from trans2es.models.topic import CommunityCategoryTagRelation
from trans2es.models.pictorial import PictorialTopics from trans2es.models.pictorial import PictorialTopics
from trans2es.models.pictorial import CommunityPictorialActivity from trans2es.models.pictorial import CommunityPictorialActivity
from alpha_types.venus import PICTORIAL_ACTIVITY_SORT from alpha_types.venus import PICTORIAL_ACTIVITY_SORT
...@@ -96,6 +97,10 @@ def pictorial_sort(user_id=-1, sort_type=GroupSortTypes.HOT_RECOMMEND, offset=0, ...@@ -96,6 +97,10 @@ def pictorial_sort(user_id=-1, sort_type=GroupSortTypes.HOT_RECOMMEND, offset=0,
@bind("physical/search/pictorial_topic") @bind("physical/search/pictorial_topic")
def pictorial_topic(topic_id=-1, offset=0, size=10): def pictorial_topic(topic_id=-1, offset=0, size=10):
""" """
帖子详情页的榜单推荐
先获取该帖子所属榜单 过滤下线的无帖子的被删除的榜单
再根据该帖子下的标签去获取有这些标签的榜单
最后根据该标签对应的分类标签去获取榜单
:remark 入选画报 :remark 入选画报
:param user_id: :param user_id:
:param sort_type: :param sort_type:
...@@ -108,7 +113,7 @@ def pictorial_topic(topic_id=-1, offset=0, size=10): ...@@ -108,7 +113,7 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
# 获取es链接对象 # 获取es链接对象
es_cli_obj = ESPerform.get_cli() es_cli_obj = ESPerform.get_cli()
q = {} q = {}
# 获取帖子从属的画报 # 获取帖子及该帖子的标签
q["query"] = { q["query"] = {
"bool": { "bool": {
"must": [ "must": [
...@@ -143,26 +148,30 @@ def pictorial_topic(topic_id=-1, offset=0, size=10): ...@@ -143,26 +148,30 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
for item in result_dict["hits"]: for item in result_dict["hits"]:
pict_pictorial_ids_list = item["_source"]["pictorial_id"] pict_pictorial_ids_list = item["_source"]["pictorial_id"]
topic_tag_list = item["_source"]["tag_list"] topic_tag_list = item["_source"]["tag_list"]
##先拿到当前帖子对应的标签的分类ID
tag_type_ids = CommunityCategoryTagRelation.objects.filter(tag_id__in=topic_tag_list,
is_online=True, is_deleted=False).values_list(
"category_tag_id", flat=True)
logging.info("get tag_type_ids:%s" % tag_type_ids)
# 拿到所属榜单
if len(pict_pictorial_ids_list) > 0:
q["query"] = { q["query"] = {
"bool": { "bool": {
"must": [{ "must": [{
"terms": { "terms": {
"id": pict_pictorial_ids_list "id": pict_pictorial_ids_list
} }
}, },
{ {
"term": { "term": {
"is_online": True "is_online": True
} }
}, },
{ {
"term": { "term": {
"is_deleted": False "is_deleted": False
} }
}, },
] ]
} }
...@@ -183,13 +192,18 @@ def pictorial_topic(topic_id=-1, offset=0, size=10): ...@@ -183,13 +192,18 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
pictorial_id = item["_source"]["id"] pictorial_id = item["_source"]["id"]
pictorial_id_list.append(pictorial_id) pictorial_id_list.append(pictorial_id)
if len(pictorial_id_list) < 10: functions_list = []
all_tag = []
all_tag.extend(topic_tag_list)
all_tag.extend(tag_type_ids)
# 如果不够10个去拿所属标签的榜单和所属分类的标签的榜单
if len(pictorial_id_list) < 10 and len(all_tag) > 0:
num = 10 - len(pictorial_id_list) num = 10 - len(pictorial_id_list)
q["query"] = { query = {
"bool": { "bool": {
"must": [{ "must": [{
"terms": { "terms": {
"tag_id": topic_tag_list "tag_id": all_tag
}}, { }}, {
"term": { "term": {
"is_online": True "is_online": True
...@@ -208,31 +222,56 @@ def pictorial_topic(topic_id=-1, offset=0, size=10): ...@@ -208,31 +222,56 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
}] }]
} }
} }
functions_list.append({
"filter": {
"constant_score": {
"filter": {
"terms": {
"tag_id": topic_tag_list
}
}
}
},
"weight": 200
})
q = {
"query": {
"function_score": {
"query": query,
"score_mode": "sum",
"boost_mode": "replace",
"functions": functions_list
}
}
}
q["_source"] = { q["_source"] = {
"includes": ["id", "tag_id"]} "includes": ["id", "tag_id"]}
q["sort"] = { q["sort"] = [
'update_time': { {
'order': 'desc' "_score": {
"order": "desc"
}} }
q["from"] = 0 },
q["size"] = 10 {
'update_time': {
'order': 'desc'
result_dict = ESPerform.get_search_results(es_cli_obj, "pictorial", q, offset, size) }
}
]
result_dict = ESPerform.get_search_results(es_cli_obj, "pictorial", q, 0, 10)
logging.info("get result_dict:%s" % result_dict)
if len(result_dict["hits"]) > 0: if len(result_dict["hits"]) > 0:
for item in result_dict["hits"]: for item in result_dict["hits"]:
id = item["_source"]["id"] id = item["_source"]["id"]
if id not in pictorial_id_list: if id not in pictorial_id_list:
pictorial_id_list.append(id) # pictorial_id_list.append(id) #
pictorial_list = pictorial_id_list if len(pictorial_id_list) < 10 else pictorial_id_list[:10] pictorial_list = pictorial_id_list if len(pictorial_id_list) < 10 else pictorial_id_list[:10]
return {"pictorial_ids_list": pictorial_list} return {"pictorial_ids_list": pictorial_list}
else: else:
return {"pictorial_ids_list": pictorial_id_list} return {"pictorial_ids_list": pictorial_id_list}
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return {"pictorial_ids_list": []} return {"pictorial_ids_list": []}
......
...@@ -319,22 +319,25 @@ class Topic(models.Model): ...@@ -319,22 +319,25 @@ class Topic(models.Model):
datetime_list = list() datetime_list = list()
if reply_query_results.count() > 0: if reply_query_results.count() > 0:
for reply in reply_query_results: for reply in reply_query_results:
UserExtra_results = UserExtra.objects.using(settings.SLAVE_DB_NAME).filter(user_id=reply['user_id']).values('is_shadow') UserExtra_results = UserExtra.objects.using(settings.SLAVE_DB_NAME).filter(
if UserExtra_results.count()>0: user_id=reply['user_id']).values('is_shadow')
if not UserExtra_results[0]['is_shadow']: if UserExtra_results.count() > 0:
datetime_list.append(reply['create_time']) if not UserExtra_results[0]['is_shadow']:
if len(datetime_list)>0: datetime_list.append(reply['create_time'])
dt = max(datetime_list) if len(datetime_list) > 0:
return datetime.datetime(dt.year,dt.month,dt.day,dt.hour, dt.minute, dt.second,tzinfo=datetime.timezone(datetime.timedelta(hours=8))) dt = max(datetime_list)
return datetime.datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
tzinfo=datetime.timezone(datetime.timedelta(hours=8)))
else: else:
dt = self.create_time dt = self.create_time
return datetime.datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, return datetime.datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
tzinfo=datetime.timezone(datetime.timedelta(hours=8))) tzinfo=datetime.timezone(datetime.timedelta(hours=8)))
else: else:
dt = self.create_time dt = self.create_time
return datetime.datetime(dt.year,dt.month,dt.day,dt.hour, dt.minute, dt.second,tzinfo=datetime.timezone(datetime.timedelta(hours=8))) return datetime.datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
tzinfo=datetime.timezone(datetime.timedelta(hours=8)))
except: except:
return datetime.datetime(1980,1,1,0,0,0,tzinfo=datetime.timezone(datetime.timedelta(hours=8))) return datetime.datetime(1980, 1, 1, 0, 0, 0, tzinfo=datetime.timezone(datetime.timedelta(hours=8)))
class TopicComplaint(models.Model): class TopicComplaint(models.Model):
...@@ -411,6 +414,7 @@ class TopicBillBoard(models.Model): ...@@ -411,6 +414,7 @@ class TopicBillBoard(models.Model):
class Reply(models.Model): class Reply(models.Model):
"""帖子回复""" """帖子回复"""
class Meta: class Meta:
verbose_name = "帖子回复" verbose_name = "帖子回复"
db_table = "reply" db_table = "reply"
...@@ -422,3 +426,16 @@ class Reply(models.Model): ...@@ -422,3 +426,16 @@ class Reply(models.Model):
is_online = models.BooleanField(verbose_name=u'是否上线') is_online = models.BooleanField(verbose_name=u'是否上线')
pictorial_id = models.IntegerField(verbose_name=u"榜单ID") pictorial_id = models.IntegerField(verbose_name=u"榜单ID")
class CommunityCategoryTagRelation(models.Model):
class Meta:
verbose_name = u"标签分类对应关系"
db_table = "community_category_tag_relation"
id = models.IntegerField(primary_key=True, verbose_name=u"主键ID")
is_deleted = models.BooleanField(verbose_name=u"是否删除")
is_online = models.BooleanField(verbose_name=u"是否上线")
tag_id = models.IntegerField(verbose_name=u"标签ID")
category_tag_id = models.IntegerField(verbose_name=u"标签类型ID")
create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
update_time = models.DateTimeField(verbose_name=u'更新时间', default=datetime.datetime.fromtimestamp(0))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment