Commit 3ab283e9 authored by lixiaofang's avatar lixiaofang

add

parent 546bf233
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
import logging import logging
import traceback import traceback
import json import json
from alpha_types.venus import TOPIC_SEARCH_SORT
from libs.es import ESPerform from libs.es import ESPerform
from .common import TopicDocumentField from .common import TopicDocumentField
from search.utils.common import * from search.utils.common import *
...@@ -90,7 +93,7 @@ class TopicUtils(object): ...@@ -90,7 +93,7 @@ class TopicUtils(object):
return [] return []
@classmethod @classmethod
def get_recommend_topic_ids(cls,user_id,offset,size,query=None,query_type=TopicPageType.FIND_PAGE,filter_topic_id_list=[]): def get_recommend_topic_ids(cls,user_id,offset,size,query=None,query_type=TopicPageType.FIND_PAGE,filter_topic_id_list=[],test_score=False):
""" """
:需增加打散逻辑 :需增加打散逻辑
:remark:获取首页推荐帖子列表 :remark:获取首页推荐帖子列表
...@@ -118,6 +121,7 @@ class TopicUtils(object): ...@@ -118,6 +121,7 @@ class TopicUtils(object):
same_group_user_info_list = result_dict["hits"][0]["_source"]["same_group_user_id_list"] same_group_user_info_list = result_dict["hits"][0]["_source"]["same_group_user_id_list"]
same_group_id_list = [item["user_id"] for item in same_group_user_info_list] same_group_id_list = [item["user_id"] for item in same_group_user_info_list]
same_group_id_list = same_group_id_list[:1000]
user_tag_list = result_dict["hits"][0]["_source"]["tag_list"] user_tag_list = result_dict["hits"][0]["_source"]["tag_list"]
...@@ -129,14 +133,32 @@ class TopicUtils(object): ...@@ -129,14 +133,32 @@ class TopicUtils(object):
q["query"] = dict() q["query"] = dict()
functions_list = [ functions_list = [
{
"filter": {
"term": {
"language_type": 1
}
},
"weight": 3
},
{ {
"gauss": { "gauss": {
"update_time": { "create_time": {
"scale": "1d", "scale": "1d",
"decay": 0.5 "decay": 0.99
}
}
} }
},
"weight": 500
}
# {
# "gauss": {
# "create_time": {
# "scale": "1d",
# "decay": 0.9
# }
# },
# "weight": 10
# }
] ]
if len(attention_user_id_list)>0: if len(attention_user_id_list)>0:
...@@ -178,11 +200,11 @@ class TopicUtils(object): ...@@ -178,11 +200,11 @@ class TopicUtils(object):
query_function_score = { query_function_score = {
"query": { "query": {
"bool": { "bool": {
"must": [ "filter": [
{"range": {"content_level": {"gte": low_content_level, "lte": 5}}}, {"range": {"content_level": {"gte": low_content_level, "lte": 5}}},
{"term": {"has_image":True}}, {"term": {"has_image":True}},
{"term": {"is_online": True}}, {"term": {"is_online": True}},
{"term": {"is_deleted": False}}, {"term": {"is_deleted": False}}
] ]
} }
}, },
...@@ -190,12 +212,12 @@ class TopicUtils(object): ...@@ -190,12 +212,12 @@ class TopicUtils(object):
"boost_mode": "sum", "boost_mode": "sum",
"functions": functions_list "functions": functions_list
} }
if query_type==TopicPageType.FIND_PAGE and len(filter_topic_id_list)>0: if len(filter_topic_id_list)>0:
query_function_score["query"]["bool"]["must_not"] =[{ query_function_score["query"]["bool"]["must_not"] = {
"terms":{ "terms":{
"id": filter_topic_id_list "id": filter_topic_id_list
} }
},{"terms":{"topic_id":read_id_list}}] }
if query is not None:#搜索帖子 if query is not None:#搜索帖子
multi_fields = { multi_fields = {
...@@ -217,10 +239,12 @@ class TopicUtils(object): ...@@ -217,10 +239,12 @@ class TopicUtils(object):
query_function_score["query"]["bool"]["minimum_should_match"] = 1 query_function_score["query"]["bool"]["minimum_should_match"] = 1
q["query"]["function_score"] = query_function_score q["query"]["function_score"] = query_function_score
q["collapse"] = {
"field": "user_id"
}
q["_source"] = { q["_source"] = {
"include":["id","group_id","offline_score"] "includes":["id","group_id","offline_score","user_id"]
} }
# for 压测
q["sort"] = [ q["sort"] = [
{ {
"_script":{ "_script":{
...@@ -233,16 +257,25 @@ class TopicUtils(object): ...@@ -233,16 +257,25 @@ class TopicUtils(object):
}, },
"order":"desc" "order":"desc"
} }
} },
"_score"
] ]
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="topic", query_body=q, result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="topic", query_body=q,
offset=offset, size=size) offset=offset, size=size)
if not test_score:
topic_id_dict = dict()
for item in result_dict["hits"]:
topic_id_dict[item["_source"]["id"]] = [item["_source"]["group_id"],item["_source"]["user_id"]]
return topic_id_dict
else:
topic_id_dict = dict() topic_id_dict = dict()
for item in result_dict["hits"]: for item in result_dict["hits"]:
topic_id_dict[item["_source"]["id"]] = item["_source"]["group_id"] topic_id_dict[item["_source"]["id"]] = [item["_source"]["group_id"],item["_source"]["user_id"],item["_score"]]
return topic_id_dict return topic_id_dict
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return dict() return dict()
...@@ -319,7 +352,7 @@ class TopicUtils(object): ...@@ -319,7 +352,7 @@ class TopicUtils(object):
} }
q["query"]["function_score"] = query_function_score q["query"]["function_score"] = query_function_score
q["_source"] = { q["_source"] = {
"include":["id","group_id","user_id","_score"] "includes":["id","group_id","user_id","_score"]
} }
result_dict = ESPerform.get_search_results(es_cli_obj, sub_index_name="topic", query_body=q, result_dict = ESPerform.get_search_results(es_cli_obj, sub_index_name="topic", query_body=q,
...@@ -348,7 +381,7 @@ class TopicUtils(object): ...@@ -348,7 +381,7 @@ class TopicUtils(object):
} }
} }
q["_source"] = { q["_source"] = {
"include":[TopicDocumentField.TAG_LIST] "includes":[TopicDocumentField.TAG_LIST]
} }
result_dict = ESPerform.get_search_results(es_cli_obj,sub_index_name="topic",query_body=q,size=1) result_dict = ESPerform.get_search_results(es_cli_obj,sub_index_name="topic",query_body=q,size=1)
...@@ -431,7 +464,7 @@ class TopicUtils(object): ...@@ -431,7 +464,7 @@ class TopicUtils(object):
"function_score":query_function_score "function_score":query_function_score
} }
q["_source"] = { q["_source"] = {
"include":["id","group_id","user_id","_score","offline_score","manual_score"] "includes":["id","group_id","user_id","_score","offline_score","manual_score"]
} }
q["sort"] = [ q["sort"] = [
{ {
...@@ -455,3 +488,81 @@ class TopicUtils(object): ...@@ -455,3 +488,81 @@ class TopicUtils(object):
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return list() return list()
@classmethod
def process_filters(cls, filters):
"""处理过滤器部分。"""
f = [
{"term": {"is_online": True}},
{"term": {"is_deleted": False}},
]
if not filters:
return f
for k, v in filters.items():
if k == "group_id":
f.append({
"term": {"group_id": v},
})
return f
@classmethod
def process_nfilters(cls, nfilters):
"""处理过滤器部分。"""
nf = []
if not nfilters:
return nf
for k, v in nfilters.items():
pass
return nf
@classmethod
def process_sort(cls, sorts_by):
"""处理排序部分。"""
sort_rule = []
if sorts_by == TOPIC_SEARCH_SORT.VOTE_NUM:
sort_rule.append({
"vote_num":{
"order":"desc"
},
"update_time":{
"order":"desc"
},
})
return sort_rule
@classmethod
def list_topic_ids(cls, filters, nfilters, sorts_by, offset=0, size=10):
q = {
"query": {
"bool": {
"must": cls.process_filters(filters),
"must_not": cls.process_nfilters(nfilters),
}
},
"_source": {
"includes":["id"]
},
"sort": [],
}
if sorts_by:
sorts = cls.process_sort(sorts_by)
q["sort"] = sorts
try:
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="topic",
query_body=q, offset=offset, size=size)
return result_dict["hits"]
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return []
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