# -*- coding: UTF-8 -*- # !/usr/bin/env python from __future__ import unicode_literals, absolute_import, print_function from gm_rpcd.all import bind import logging import traceback import json from search.utils.topic import TopicUtils from libs.es import ESPerform from libs.cache import redis_client from search.utils.common import * from gm_rpcd.all import bind import functools import logging import traceback from libs.es import ESPerform logger = logging.getLogger(__name__) MAX_LOAD = 100 GROUP_SIZE = 10 @bind('physical/search/query_contrast_similar') def contrast_similar(user_id, offset=0, size=10): try: if isinstance(user_id, int): contrast_topic_id_list = get_all_topic_id_list(user_id, offset, size) return {"contrast_similar_topic_id": contrast_topic_id_list} except: logging.error("catch exception,err_msg:%s" % traceback.format_exc()) return {"contrast_similar_topic_id": []} def get_all_topic_id_list(user_id, offset, size): try: if user_id: redis_key = "physical:user_similar:participant_user_id:" + str(user_id) redis_field_val_list = redis_client.get(redis_key) have_read_topic_id_list = json.loads(redis_field_val_list) if redis_field_val_list else [] read_topic_id_list = list() if len(have_read_topic_id_list) > 0: for i in have_read_topic_id_list: read_topic_id_list.append(i.get("contrast_user_id")) q = { "query": { "function_score": { "query": { "bool": { "must": [{ "term": { "is_online": True } }, { "term": { "is_deleted": False } }, { "terms": { "content_level": [3, 4, 5] } }], "minimum_should_match": 1, "should": { "terms": { "user_id": read_topic_id_list } } } } } } } logging.info('contrast_similar,as q:%s' % str(q).encode('utf-8')) result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="topic", query_body=q, offset=offset, size=size) contrast_topic_ids = [] if len(result_dict['hits']) > 0: res_hit = result_dict['hits'] for item in res_hit: topic_id = item['_source']['id'] contrast_topic_ids.append(topic_id) logging.info('contrast_similar_topic_id:%s' % contrast_topic_ids) return contrast_topic_ids except: logging.error("catch exception,err_msg:%s" % traceback.format_exc()) return {"contrast_similar_topic_id": []}