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, ...@@ -88,7 +88,6 @@ def pictorial_sort(user_id=-1, sort_type=GroupSortTypes.HOT_RECOMMEND, offset=0,
return {"pictorial_recommend_ids": []} return {"pictorial_recommend_ids": []}
@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 入选画报
...@@ -233,6 +232,141 @@ def pictorial_topic(topic_id=-1, offset=0, size=10): ...@@ -233,6 +232,141 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
return {"pictorial_ids_list": []} 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") @bind("physical/search/pictorial_topic_sort")
def pictorial_topic_sort(pictorial_id=-1, offset=0, size=10): def pictorial_topic_sort(pictorial_id=-1, offset=0, size=10):
""" """
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
"effective":{"type":"boolean"}, "effective":{"type":"boolean"},
"offline_score":{"type":"long"}, "offline_score":{"type":"long"},
"is_default":{"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 ...@@ -2,9 +2,9 @@ import datetime
from django.db import models from django.db import models
import logging import logging
import traceback import traceback
from .tag import Tag from .tag import Tag
from .topic import Topic from .topic import Topic, Reply
from .user import UserExtra
class PictorialFollow(models.Model): class PictorialFollow(models.Model):
...@@ -60,6 +60,7 @@ class Pictorial(models.Model): ...@@ -60,6 +60,7 @@ class Pictorial(models.Model):
topic_num = models.IntegerField(verbose_name=u'次数') topic_num = models.IntegerField(verbose_name=u'次数')
add_score = models.IntegerField(verbose_name=u'人工权重') add_score = models.IntegerField(verbose_name=u'人工权重')
is_default = models.IntegerField(verbose_name=u"是否是默认画报") is_default = models.IntegerField(verbose_name=u"是否是默认画报")
has_cover = models.IntegerField(verbose_name="是否有封面")
def get_topic_id(self): def get_topic_id(self):
try: try:
...@@ -78,7 +79,8 @@ class Pictorial(models.Model): ...@@ -78,7 +79,8 @@ class Pictorial(models.Model):
for topic_id in topic_id_list: for topic_id in topic_id_list:
topic_id_object = Topic.objects.filter(id=int(topic_id)).first() 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 effective_num += 1
if effective_num >= 5: if effective_num >= 5:
ret = True ret = True
...@@ -145,6 +147,69 @@ class Pictorial(models.Model): ...@@ -145,6 +147,69 @@ class Pictorial(models.Model):
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False 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): class PictorialTag(models.Model):
"""画报关注标签""" """画报关注标签"""
...@@ -160,3 +225,4 @@ class PictorialTag(models.Model): ...@@ -160,3 +225,4 @@ class PictorialTag(models.Model):
pictorial_id = models.BigIntegerField(verbose_name=u'画报ID', max_length=20) pictorial_id = models.BigIntegerField(verbose_name=u'画报ID', max_length=20)
tag_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_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): ...@@ -419,3 +419,4 @@ class Reply(models.Model):
is_deleted = models.BooleanField(verbose_name=u'是否删除') is_deleted = models.BooleanField(verbose_name=u'是否删除')
is_online = models.BooleanField(verbose_name=u'是否上线') is_online = models.BooleanField(verbose_name=u'是否上线')
...@@ -9,18 +9,18 @@ from libs.es import ESPerform ...@@ -9,18 +9,18 @@ from libs.es import ESPerform
from django.db import models from django.db import models
import datetime import datetime
class UserExtra(models.Model): class UserExtra(models.Model):
class Meta: class Meta:
verbose_name=u"推荐用户表" verbose_name = u"推荐用户表"
db_table="user_extra" db_table = "user_extra"
id = models.IntegerField(verbose_name="主键ID",primary_key=True)
user_id = models.CharField(verbose_name=u"用户ID",max_length=100)
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_shadow = models.BooleanField(verbose_name=u"是否是马甲账户")
is_online = models.BooleanField(verbose_name=u"是否上线") is_online = models.BooleanField(verbose_name=u"是否上线")
is_recommend = models.BooleanField(verbose_name=u"是否推荐") is_recommend = models.BooleanField(verbose_name=u"是否推荐")
has_answered = models.BooleanField(verbose_name=u"") has_answered = models.BooleanField(verbose_name=u"")
is_deleted = models.BooleanField(verbose_name=u"") is_deleted = models.BooleanField(verbose_name=u"")
create_time = models.DateTimeField(verbose_name=u'创建时间',default=datetime.datetime.fromtimestamp(0)) create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
update_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
...@@ -67,7 +67,9 @@ class PictorialTransfer(object): ...@@ -67,7 +67,9 @@ class PictorialTransfer(object):
res["effective"] = instance.get_effective(res["topic_id_list"]) res["effective"] = instance.get_effective(res["topic_id_list"])
res["offline_score"] = cls.get_offline_score(instance, res["topic_id_list"]) res["offline_score"] = cls.get_offline_score(instance, res["topic_id_list"])
res["is_default"] = instance.is_default 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 return res
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) 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