Commit 3ab283e9 authored by lixiaofang's avatar lixiaofang

add

parent 546bf233
......@@ -4,6 +4,9 @@
import logging
import traceback
import json
from alpha_types.venus import TOPIC_SEARCH_SORT
from libs.es import ESPerform
from .common import TopicDocumentField
from search.utils.common import *
......@@ -90,7 +93,7 @@ class TopicUtils(object):
return []
@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:获取首页推荐帖子列表
......@@ -118,6 +121,7 @@ class TopicUtils(object):
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 = same_group_id_list[:1000]
user_tag_list = result_dict["hits"][0]["_source"]["tag_list"]
......@@ -129,14 +133,32 @@ class TopicUtils(object):
q["query"] = dict()
functions_list = [
{
"filter": {
"term": {
"language_type": 1
}
},
"weight": 3
},
{
"gauss": {
"update_time": {
"create_time": {
"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:
......@@ -178,11 +200,11 @@ class TopicUtils(object):
query_function_score = {
"query": {
"bool": {
"must": [
"filter": [
{"range": {"content_level": {"gte": low_content_level, "lte": 5}}},
{"term": {"has_image":True}},
{"term": {"is_online": True}},
{"term": {"is_deleted": False}},
{"term": {"is_deleted": False}}
]
}
},
......@@ -190,12 +212,12 @@ class TopicUtils(object):
"boost_mode": "sum",
"functions": functions_list
}
if query_type==TopicPageType.FIND_PAGE and len(filter_topic_id_list)>0:
query_function_score["query"]["bool"]["must_not"] =[{
if len(filter_topic_id_list)>0:
query_function_score["query"]["bool"]["must_not"] = {
"terms":{
"id": filter_topic_id_list
}
},{"terms":{"topic_id":read_id_list}}]
}
if query is not None:#搜索帖子
multi_fields = {
......@@ -217,10 +239,12 @@ class TopicUtils(object):
query_function_score["query"]["bool"]["minimum_should_match"] = 1
q["query"]["function_score"] = query_function_score
q["collapse"] = {
"field": "user_id"
}
q["_source"] = {
"include":["id","group_id","offline_score"]
"includes":["id","group_id","offline_score","user_id"]
}
# for 压测
q["sort"] = [
{
"_script":{
......@@ -233,16 +257,25 @@ class TopicUtils(object):
},
"order":"desc"
}
}
},
"_score"
]
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="topic", query_body=q,
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()
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
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return dict()
......@@ -319,7 +352,7 @@ class TopicUtils(object):
}
q["query"]["function_score"] = query_function_score
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,
......@@ -348,7 +381,7 @@ class TopicUtils(object):
}
}
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)
......@@ -431,7 +464,7 @@ class TopicUtils(object):
"function_score":query_function_score
}
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"] = [
{
......@@ -455,3 +488,81 @@ class TopicUtils(object):
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
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