Commit f09a5adf authored by zhanglu's avatar zhanglu

帖子同步到es

parent 0d6fdd80
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
<config name="initializer_list"> <config name="initializer_list">
<element value="physical.django_init"/> <element value="physical.django_init"/>
<element value="search.views.topic"/> <element value="search.views.topic"/>
<element value="search.views.business_topic"/>
<element value="search.views.pick"/> <element value="search.views.pick"/>
<element value="search.views.group"/> <element value="search.views.group"/>
<element value="search.views.user"/> <element value="search.views.user"/>
......
...@@ -560,10 +560,30 @@ class TopicUtils(object): ...@@ -560,10 +560,30 @@ class TopicUtils(object):
return f return f
for k, v in filters.items(): for k, v in filters.items():
if k == "group_id":
if k in ["create_time_gte", "create_time_lte"]:
if k == "create_time_gte":
op = "gte"
elif k == "create_time_lte":
op = "lte"
f.append({ f.append({
"term": {"group_id": v}, "range": {
"create_time_val": {
op: v,
}
}
}) })
else:
if isinstance(k, list):
f.append({
"terms": {k: v},
})
else:
f.append({
"term": {k: v},
})
if filter_online: if filter_online:
f.append({"term": {"is_online": True}}) f.append({"term": {"is_online": True}})
...@@ -598,22 +618,29 @@ class TopicUtils(object): ...@@ -598,22 +618,29 @@ class TopicUtils(object):
}, },
}) })
elif sorts_by == TOPIC_SEARCH_SORT.VOTE_NUM:
pass
elif sorts_by == '2':
sort_rule.append({
"id":{
"order":"desc"
},
})
return sort_rule return sort_rule
@classmethod @classmethod
def list_topic_ids(cls, filters, nfilters, sorts_by, offset=0, size=10, index_name="topic", filter_online=True): def list_topic_ids(cls, filters, nfilters, sorts_by, offset=0, size=10, index_name="topic", filter_online=True):
must = cls.process_filters(filters, filter_online=True)
q = { q = {
"query": { "query": {
"bool": { "bool": {
"must": cls.process_filters(filters, filter_online=True), "must": must,
"must_not": cls.process_nfilters(nfilters), "must_not": cls.process_nfilters(nfilters),
} }
}, }
"_source": {
"includes":["id"]
},
"sort": [],
} }
if sorts_by: if sorts_by:
...@@ -626,7 +653,13 @@ class TopicUtils(object): ...@@ -626,7 +653,13 @@ class TopicUtils(object):
query_body=q, offset=offset, size=size query_body=q, offset=offset, size=size
) )
return result_dict["hits"] return {
"hits": result_dict["hits"],
"total_count": result_dict["total_count"]
}
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return [] return {
"hits": [],
"total_count": 0
}
...@@ -14,16 +14,17 @@ from libs.es import ESPerform ...@@ -14,16 +14,17 @@ from libs.es import ESPerform
@bind("physical/search/business/topic") @bind("physical/search/business/topic")
def topic_search(filters, nfilters=None, sorts_by=None, offset=0, size=10): def business_topic_search(filters, nfilters=None, sorts_by=None, offset=0, size=10):
"""帖子搜索。""" """帖子搜索。"""
try: try:
result_list = TopicUtils.list_topic_ids( result_list = TopicUtils.list_topic_ids(
filters=filters, nfilters=nfilters, sorts_by=sorts_by, filters=filters, nfilters=nfilters, sorts_by=sorts_by,
offset=offset, size=size, filter_online=False offset=offset, size=size, filter_online=False,
index_name="business_topic"
) )
topic_ids = [item["_source"]["id"] for item in result_list] topic_ids = [item["_source"]["id"] for item in result_list["hits"]]
return {"topic_ids": topic_ids} return {"topic_ids": topic_ids, "total_count": result_list["total_count"]}
except: except:
logging.error("catch exception, err_msg:%s" % traceback.format_exc()) logging.error("catch exception, err_msg:%s" % traceback.format_exc())
return {"topic_ids": []} return {"topic_ids": [], "total_count": 0}
...@@ -285,11 +285,14 @@ def topic_search(filters, nfilters=None, sorts_by=None, offset=0, size=10): ...@@ -285,11 +285,14 @@ def topic_search(filters, nfilters=None, sorts_by=None, offset=0, size=10):
try: try:
result_list = TopicUtils.list_topic_ids(filters=filters, nfilters=nfilters, result_list = TopicUtils.list_topic_ids(filters=filters, nfilters=nfilters,
sorts_by=sorts_by, offset=offset, size=size) sorts_by=sorts_by, offset=offset, size=size)
topic_ids = [item["_source"]["id"] for item in result_list] topic_ids = [item["_source"]["id"] for item in result_list["hits"]]
return {"topic_ids": topic_ids} return {
"topic_ids": topic_ids,
"total_count": result_list["total_count"]
}
except: except:
logging.error("catch exception, err_msg:%s" % traceback.format_exc()) logging.error("catch exception, err_msg:%s" % traceback.format_exc())
return {"topic_ids": []} return {"topic_ids": [], "total_count": 0}
@bind("physical/search/query_topic_by_user_similarity") @bind("physical/search/query_topic_by_user_similarity")
......
// 业务端帖子存储表做宽表查询
{
"dynamic": "strict",
"properties":{
"id":{"type": "long"},
"user_id":{"type": "long"},
"is_shadow": {"type": "boolean"},
"is_online":{"type": "boolean"},
"is_deleted":{"type": "boolean"},
"has_image":{"type": "boolean"}, //是否有图
"has_video":{"type": "boolean"}, //是否是视频
"is_recommend": {"type": "boolean"},
"is_complaint": {"type": "boolean"}, // 是否被举报
"vote_num":{"type": "long"},
"reply_num":{"type": "long"},
"share_num": {"type": "long"},
"name":{
"type": "text",
"analyzer": "gm_default_index",
"search_analyzer": "gm_default_index"
},
"description":{
"type": "text",
"analyzer": "gm_default_index",
"search_analyzer": "gm_default_index"
},
"content":{
"type": "text",
"analyzer": "gm_default_index",
"search_analyzer": "gm_default_index"
},
"content_level":{"type": "text"},
"virtual_content_level":{"type": "text"},
"language_type": {"type": "long"},
"like_num_crawl": {"type": "long"}, // 爬取点赞数
"comment_num_crawl": {"type": "long"}, // 爬取评论数
"is_crawl": {"type": "boolean"},
"platform": {"type": "long"},
"platform_id": {"type": "long"},
"drop_score":{"type": "double"}, // 人工降分
"sort_score":{"type": "double"}, // 排序分
"pictorial_id":{"type": "long"}, //所在组ID
"pictorial_name":{ // 所在组名称
"type": "text",
"analyzer": "gm_default_index",
"search_analyzer": "gm_default_index"
},
"create_time":{"type": "date", "format": "date_time_no_millis"},
"update_time":{"type": "date", "format": "date_time_no_millis"},
"create_time_val":{"type": "long"},
"update_time_val":{"type": "long"},
"tag_list":{"type": "long"}, // 标签属性
"edit_tag_list":{"type": "long"}, //编辑标签
"tag_name_list":{
"type": "text",
"analyzer": "gm_default_index",
"search_analyzer": "gm_default_index"
}
}
}
\ No newline at end of file
...@@ -25,6 +25,29 @@ ...@@ -25,6 +25,29 @@
"update_time":{"type":"date", "format":"date_time_no_millis"}, "update_time":{"type":"date", "format":"date_time_no_millis"},
"create_time_val":{"type":"long"}, "create_time_val":{"type":"long"},
"update_time_val":{"type":"long"}, "update_time_val":{"type":"long"},
"language_type":{"type":"long"} "language_type":{"type":"long"},
"is_shadow": {"type": "boolean"},
"is_recommend": {"type": "boolean"},
"is_complaint": {"type": "boolean"}, // 是否被举报
"virtual_content_level":{"type": "text"},
"like_num_crawl": {"type": "long"}, // 爬取点赞数
"comment_num_crawl": {"type": "long"}, // 爬取评论数
"is_crawl": {"type": "boolean"},
"platform": {"type": "long"},
"platform_id": {"type": "long"},
"drop_score":{"type": "double"}, // 人工降分
"sort_score":{"type": "double"}, // 排序分
"pictorial_id":{"type": "long"}, //所在组ID
"pictorial_name":{ // 所在组名称
"type": "text",
"analyzer": "gm_default_index",
"search_analyzer": "gm_default_index"
}
} }
} }
\ No newline at end of file
...@@ -13,4 +13,4 @@ from .tag import AccountUserTag ...@@ -13,4 +13,4 @@ from .tag import AccountUserTag
from .user import User from .user import User
from .group import Group from .group import Group
from .topic import Topic from .topic import Topic
from .pictorial import PictorialTopic # from .pictorial import PictorialTopic
from django.db import models # from django.db import models
class PictorialTopic(models.Model): # class PictorialTopic(models.Model):
"""画报帖子关系""" # """画报帖子关系"""
class Meta: # class Meta:
verbose_name = u'画报帖子关系' # verbose_name = u'画报帖子关系'
app_label = 'community' # app_label = 'community'
db_table = 'community_pictorial_topic' # db_table = 'community_pictorial_topic'
id = models.IntegerField(verbose_name=u'日记ID', primary_key=True) # id = models.IntegerField(verbose_name=u'日记ID', primary_key=True)
pictorial_id = models.BigIntegerField(verbose_name=u'画报ID') # pictorial_id = models.BigIntegerField(verbose_name=u'画报ID')
topic_id = models.BigIntegerField(verbose_name=u'帖子ID') # topic_id = models.BigIntegerField(verbose_name=u'帖子ID')
user_id = models.BigIntegerField(verbose_name=u'用户ID') # user_id = models.BigIntegerField(verbose_name=u'用户ID')
is_online = models.BooleanField(verbose_name=u"是否有效", default=True) # is_online = models.BooleanField(verbose_name=u"是否有效", default=True)
is_online = models.BooleanField(verbose_name=u'是否上线') # is_online = models.BooleanField(verbose_name=u'是否上线')
is_deleted = models.BooleanField(verbose_name=u'是否删除') # is_deleted = models.BooleanField(verbose_name=u'是否删除')
...@@ -265,16 +265,6 @@ def get_type_info_map(): ...@@ -265,16 +265,6 @@ def get_type_info_map():
round_insert_chunk_size=5, round_insert_chunk_size=5,
round_insert_period=2, round_insert_period=2,
), ),
TypeInfo(
name='business_topic', # 运营后台
type='business_topic',
model=topic.Topic,
query_deferred=lambda: topic.Topic.objects.all().query,
get_data_func=TopicTransfer.get_business_topic_data,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo( TypeInfo(
name = "user", #用户 name = "user", #用户
type="user", type="user",
......
...@@ -94,61 +94,4 @@ class TopicTransfer(object): ...@@ -94,61 +94,4 @@ class TopicTransfer(object):
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())
return None return None
\ No newline at end of file
@classmethod
def get_business_topic_data(cls,instance):
try:
res = {
"id": instance.id,
"user_id": instance.user_id,
"is_shadow": instance.is_shadow,
"is_online": instance.is_online,
"is_deleted": instance.is_deleted,
"has_image": instance.topic_has_image(),
"has_video": instance.has_video,
"is_recommend": True if instance.is_recommend else False,
"is_complaint": instance.is_complaint,
"vote_num": instance.vote_num,
"reply_num": instance.reply_num,
"share_num": instance.share_num,
"name": instance.name,
"description": instance.description,
"content": instance.content,
"content_level": instance.content_level,
"virtual_content_level": instance.virtual_content_level,
"language_type": instance.language_type,
"like_num_crawl": instance.like_num_crawl,
"comment_num_crawl": instance.comment_num_crawl,
"is_crawl": instance.is_crawl,
"platform": instance.platform,
"platform_id": instance.platform_id,
"drop_score": instance.drop_score,
"sort_score": instance.sort_score,
}
(topic_tag_id_list, edit_tag_id_list) = instance.get_topic_tag_id_list()
res["tag_list"] = topic_tag_id_list
res["edit_tag_list"] = edit_tag_id_list
res["tag_name_list"] = instance.get_tag_name_list(res["tag_list"]),
create_time = instance.create_time
tzlc_create_time = tzlc(create_time)
res["create_time"] = tzlc_create_time
res["create_time_val"] = int(time.mktime(tzlc_create_time.timetuple()))
update_time = instance.update_time
tzlc_update_time = tzlc(update_time)
res["update_time"] = tzlc_update_time
res["update_time_val"] = int(time.mktime(tzlc_update_time.timetuple()))
return res
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return None
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