1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- 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": []}