Commit 8085738e authored by lixiaofang's avatar lixiaofang

add

parent ce8cb6ba
......@@ -88,7 +88,6 @@ def pictorial_sort(user_id=-1, sort_type=GroupSortTypes.HOT_RECOMMEND, offset=0,
return {"pictorial_recommend_ids": []}
@bind("physical/search/pictorial_topic")
def pictorial_topic(topic_id=-1, offset=0, size=10):
"""
:remark 入选画报
......@@ -233,6 +232,141 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
return {"pictorial_ids_list": []}
@bind("physical/search/pictorial_topic")
def pictorial_topic_v1(topic_id=-1, offset=0, size=10):
"""
:remark 入选画报
:param user_id:
:param sort_type:
:param offset:
:param size:
:return:
"""
try:
# 获取es链接对象
es_cli_obj = ESPerform.get_cli()
q = {}
# 获取帖子从属的画报
q["query"] = {
"bool": {
"must": [
{
"term": {
"id": topic_id
}
},
{
"term": {
"is_online": True
}
}
],
"must_not": [
{
"term": {
"is_history": True
}
}
]
}
}
q["_source"] = {
"includes": ["id", "pictorial_id", "edit_tag_list"]
}
result_dict = ESPerform.get_search_results(es_cli_obj, "topic", q, offset=0, size=1)
edit_tag_list = []
pictorial_id_list = []
if len(result_dict["hits"]) > 0:
for item in result_dict["hits"]:
edit_tag_list = item["_source"]["edit_tag_list"]
functions_list = [
{
"filter": {
"bool": {
"must": {
"term": {
"topic_id_list": topic_id
}
}
}
},
"weight": 200
},
{
"filter": {
"bool": {
"must": {
"term": {
"is_recommend": True
}
}
}
},
"weight": 100
}
]
query_function_score = {
"query": {
"bool": {
"must": [{
"terms": {
"edit_tag_list": edit_tag_list
}
},
{
"term": {
"is_online": True
}
},
{
"term": {
"is_deleted": False
}
},
]
}
},
"score_mode": "sum",
"boost_mode": "replace",
"functions": functions_list
}
q["query"] = {
"function_score": query_function_score
}
q["_source"] = {
"includes": ["id", "edit_tag_list", "topic_id_list"]
}
q["sort"] = [
{
"_script": {
"type": "number",
"script": {
"lang": "expression",
"source": "_score+doc['reply_score']"
},
"order": "desc"
}
}
]
result_dict = ESPerform.get_search_results(es_cli_obj, "pictorial", q, offset, size)
if len(result_dict["hits"]) > 0:
for item in result_dict["hits"]:
pictorial_id = item["_source"]["id"]
pictorial_id_list.append(pictorial_id)
return {"pictorial_ids_list": pictorial_id_list}
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return {"pictorial_ids_list": []}
@bind("physical/search/pictorial_topic_sort")
def pictorial_topic_sort(pictorial_id=-1, offset=0, size=10):
"""
......
......@@ -19,6 +19,8 @@
"effective":{"type":"boolean"},
"offline_score":{"type":"long"},
"is_default":{"type":"long"},
"is_cover":{"type":"boolean"}
"is_cover":{"type":"boolean"},
"edit_tag_list":{"type":"long"},
"reply_score":{"type":"long"}
}
}
\ No newline at end of file
......@@ -2,9 +2,9 @@ import datetime
from django.db import models
import logging
import traceback
from .tag import Tag
from .topic import Topic
from .topic import Topic, Reply
from .user import UserExtra
class PictorialFollow(models.Model):
......@@ -60,6 +60,7 @@ class Pictorial(models.Model):
topic_num = models.IntegerField(verbose_name=u'次数')
add_score = models.IntegerField(verbose_name=u'人工权重')
is_default = models.IntegerField(verbose_name=u"是否是默认画报")
has_cover = models.IntegerField(verbose_name="是否有封面")
def get_topic_id(self):
try:
......@@ -78,7 +79,8 @@ class Pictorial(models.Model):
for topic_id in topic_id_list:
topic_id_object = Topic.objects.filter(id=int(topic_id)).first()
if topic_id_object and topic_id_object.is_online and int(topic_id_object.content_level) in [0, 3, 4, 5,6]:
if topic_id_object and topic_id_object.is_online and int(topic_id_object.content_level) in [0, 3, 4, 5,
6]:
effective_num += 1
if effective_num >= 5:
ret = True
......@@ -145,6 +147,69 @@ class Pictorial(models.Model):
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False
def get_edit_tag_list(self):
try:
edit_tag_list = list(set(PictorialTag.objects.filter(pictorial_id=self.id, is_online=True,
is_collection=1).values_list(
"tag_id", flat=True)))
return edit_tag_list
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return []
def get_reply_score(self):
try:
yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
threeday = datetime.datetime.now() - datetime.timedelta(days=3)
three_begin_time = "%s-%s-%s 00:00:00" % (threeday.year, threeday.month, threeday.day)
yesterday_end_time = "%s-%s-%s 23:59:59" % (yesterday.year, yesterday.month, yesterday.day)
topic_id = self.get_topic_id()
logging.info("get topic_id:%s" % topic_id)
reply_user_id = (Reply.objects.filter(topic_id__in=topic_id, is_online=True, is_deleted=False,
create_time__gte=three_begin_time,
create_time__lte=yesterday_end_time).values("user_id", "id"))
logging.info("get reply_user_id:%s" % reply_user_id)
user_ids = []
for item in reply_user_id:
user_ids.append(item.get("user_id", None))
logging.info("get user_ids:%s" % user_ids)
user_id_sahdow = UserExtra.objects.filter(user_id__in=user_ids, is_shadow=False).values_list("user_id",
flat=True)
logging.info("get user_id_sahdow:%s" % user_id_sahdow)
reply_shadow = []
for item in reply_user_id:
user_id = item.get("user_id", None)
if user_id not in user_id_sahdow:
reply_shadow.append(item)
logging.info("get reply_shadow:%s" % reply_shadow)
if len(reply_shadow) >= 1 and len(reply_shadow) <= 4:
return 20
elif len(reply_shadow) >= 5 and len(reply_shadow) <= 10:
return 50
elif len(reply_shadow) >= 10:
return 100
else:
return 0
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return 0
class PictorialTag(models.Model):
"""画报关注标签"""
......@@ -160,3 +225,4 @@ class PictorialTag(models.Model):
pictorial_id = models.BigIntegerField(verbose_name=u'画报ID', max_length=20)
tag_id = models.BigIntegerField(verbose_name=u'标签ID', max_length=20)
is_online = models.BooleanField(verbose_name=u'是否上线', max_length=1)
is_collection = models.IntegerField(verbose_name=u'是否编辑', max_length=10)
......@@ -419,3 +419,4 @@ class Reply(models.Model):
is_deleted = models.BooleanField(verbose_name=u'是否删除')
is_online = models.BooleanField(verbose_name=u'是否上线')
......@@ -9,18 +9,18 @@ from libs.es import ESPerform
from django.db import models
import datetime
class UserExtra(models.Model):
class Meta:
verbose_name=u"推荐用户表"
db_table="user_extra"
id = models.IntegerField(verbose_name="主键ID",primary_key=True)
user_id = models.CharField(verbose_name=u"用户ID",max_length=100)
verbose_name = u"推荐用户表"
db_table = "user_extra"
id = models.IntegerField(verbose_name="主键ID", primary_key=True)
user_id = models.CharField(verbose_name=u"用户ID", max_length=100)
is_shadow = models.BooleanField(verbose_name=u"是否是马甲账户")
is_online = models.BooleanField(verbose_name=u"是否上线")
is_recommend = models.BooleanField(verbose_name=u"是否推荐")
has_answered = models.BooleanField(verbose_name=u"")
is_deleted = models.BooleanField(verbose_name=u"")
create_time = models.DateTimeField(verbose_name=u'创建时间',default=datetime.datetime.fromtimestamp(0))
update_time = models.DateTimeField(verbose_name=u'更新时间', default=datetime.datetime.fromtimestamp(0))
\ No newline at end of file
create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
update_time = models.DateTimeField(verbose_name=u'更新时间', default=datetime.datetime.fromtimestamp(0))
......@@ -67,7 +67,9 @@ class PictorialTransfer(object):
res["effective"] = instance.get_effective(res["topic_id_list"])
res["offline_score"] = cls.get_offline_score(instance, res["topic_id_list"])
res["is_default"] = instance.is_default
res["is_cover"] = instance.get_is_cover(res["topic_id_list"])
res["is_cover"] = True if instance.has_cover else False
res["edit_tag_list"] = instance.get_edit_tag_list()
res["reply_score"] = instance.get_reply_score()
return res
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
......
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