Commit b62c423e authored by lixiaofang's avatar lixiaofang

add contrast_similar.py

parent 664863f4
# -*- 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
......@@ -12,71 +24,78 @@ GROUP_SIZE = 10
@bind('doris/search/query_contrast_similar')
def query_contrast_similar(query, offset=0, size=10):
def contrast_similar(user_id, offset=0, size=10):
try:
assert (query is not None and len(query) > 0)
# multi_fields = {
# 'user_id': 100,
# }
# query_fields = ['^'.join((k, str(v))) for (k, v) in multi_fields.items()]
#
# multi_match = {
# 'query': query,
# 'type': 'cross_fields',
# 'operator': 'and',
# 'fields': query_fields,
# }
if isinstance(user_id, int):
contrast_topic_id_list = get_all_topic_id_list(user_id, offset, size)
return {"contrast_user_id_list": contrast_topic_id_list}
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return {"contrast_user_id_list": []}
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}
},
{"term": {
"id": query}
"must": [{
"term": {
"is_online": True
}
}, {
"term": {
"is_deleted": False
}
}],
"should": {
"match": {
"participant_user_id": read_topic_id_list
}
],
"minimum_should_match": 1
},
"minimum_should_match": 1
}
}
}
}
},
"sort": [{"similarity": "desc"}],
"size": size
}
logging.info('test query es :%s' % str(q).encode('utf-8'))
logging.info('contrast_similar,as q:%s' % str(q).encode('utf-8'))
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="contrast_similar", query_body=q,
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="topic",
query_body=q,
offset=offset, size=size)
contrast_topic_ids = []
logging.info(('res contrast_similar :%s' % str(result_dict)))
logging.info("q:%s" % q)
if result_dict['hits']["total"] > 0:
res_hit = result_dict["hits"]["hits"]
res_hit = result_dict['hits']["hits"]
for item in res_hit:
topic_id = item['_source']['id']
contrast_topic_ids.append(topic_id)
if '_source' in item:
wiki_name = item['_source']['contrast_user_id_list']
logging.info('contrast_similar_topic_id:%s' % contrast_topic_ids)
logging.info('contrast_user_id_list res:%s' % wiki_name)
return {"contrast_user_id_list": contrast_topic_ids}
return {"wiki_hot_recommends": wiki_name}
except:
logging.error("catch exception, query_sku:%s" % traceback.format_exc())
return {'wiki_hot_recommends': []}
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return {"contrast_user_id_list": []}
This diff is collapsed.
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