Commit 9822f668 authored by lixiaofang's avatar lixiaofang

add

parents 53e88b81 2d063776
......@@ -5,14 +5,14 @@ from __future__ import unicode_literals, absolute_import, print_function
import logging
import traceback
import json
import base64
import hashlib
import base64, hashlib
from libs.es import ESPerform
from libs.cache import redis_client
from libs.tools import g_hospital_pos_dict
from libs.tools import point_distance
from gm_rpcd.all import bind
from trans2es.commons.words_utils import QueryWordAttr, get_tips_word_type
from pypinyin import pinyin, lazy_pinyin
def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
......@@ -21,8 +21,6 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
50%前段强加权后根据tab转化率和词频进行排序 索引 suggest gray_number=1 尾号["0", "1", "2", "3", "c", "d", "e", "f"]
25%去掉前段强加权后 直接根据tag转化率和词频进行排序 suggest-v1 gray_number=2 尾号["4", "5", "6", "a"]
25%去掉前段强加权后 根据tag转化率和词频进行排序 再根据前段加权展示排序 suggest-v1 gray_number=3 尾号["9", "8", "7", "b"]
:param query:
:param lat:
:param lng:
......@@ -31,8 +29,8 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
:param device_id:
:return:
"""
try:
try:
###在原来的逻辑上加两层灰度
gray_number = recommed_service_category_device_id(device_id)
if gray_number == 1:
......@@ -40,93 +38,11 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
else:
sub_index_name = "suggest-v1"
###获取联想到的数据
# ios输入法在某些情况下会携带\\u2006
query = query.replace("\u2006", '')
q = {
"suggest": {
"tips-suggest": {
"prefix": query,
"completion": {
"field": "suggest",
"size": size,
"contexts": {
"is_online": [True]
},
"fuzzy": {
"fuzziness": 0
}
}
}
},
"_source": {
"includes": ["id", "ori_name", "offline_score", "is_online", "type_flag", "results_num"]
}
}
get_doctor_hospital_data = list()
get_tag_wiki_data = list()
have_read_tips_set = set()
ret_list = list()
doctor_hospital_equal_query = list()
tag_equal_query = list()
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name=sub_index_name, query_body=q,
offset=offset, size=size, is_suggest_request=True)
for tips_item in result_dict["suggest"]["tips-suggest"]:
for hit_item in tips_item["options"]:
if hit_item["_source"]["ori_name"] not in have_read_tips_set:
have_read_tips_set.add(hit_item["_source"]["ori_name"])
highlight_marks = u'<ems>%s</ems>' % query
hit_item["_source"]["highlight_name"] = set_highlihgt(query, hit_item["_source"]["ori_name"])
if hit_item["_source"]["type_flag"] == "hospital":
if lat is not None and lng is not None and lat != 0.0 and lng != 0.0:
if hit_item["_source"]["ori_name"] in g_hospital_pos_dict:
distance = point_distance(lng, lat,
g_hospital_pos_dict[hit_item["_source"]["ori_name"]][0],
g_hospital_pos_dict[hit_item["_source"]["ori_name"]][1])
if distance < 1000 * 50:
if distance < 1000:
if distance < 100:
hit_item["_source"]["describe"] = "<100" + "米"
else:
hit_item["_source"]["describe"] = "约" + str(int(distance)) + "米"
else:
hit_item["_source"]["describe"] = "约" + str(
round(1.0 * distance / 1000, 1)) + "km"
else:
hit_item["_source"]["describe"] = ">50km"
else:
hit_item["_source"]["describe"] = ""
else:
hit_item["_source"]["describe"] = ""
if hit_item["_source"]["ori_name"] == query:
doctor_hospital_equal_query.append(hit_item["_source"])
else:
get_doctor_hospital_data.append(hit_item["_source"])
else:
if hit_item["_source"]["type_flag"] == "doctor":
hit_item["_source"]["describe"] = ""
if hit_item["_source"]["ori_name"] == query:
doctor_hospital_equal_query.append(hit_item["_source"])
else:
get_doctor_hospital_data.append(hit_item["_source"])
else:
hit_item["_source"]["describe"] = "约" + str(hit_item["_source"]["results_num"]) + "个结果" if \
hit_item["_source"]["results_num"] else ""
if hit_item["_source"]["ori_name"] == query:
tag_equal_query.append(hit_item["_source"])
else:
get_tag_wiki_data.append(hit_item["_source"])
ret_list.extend(tag_equal_query)
ret_list.extend(doctor_hospital_equal_query)
ret_list.extend(get_tag_wiki_data)
ret_list.extend(get_doctor_hospital_data)
have_read_tips_set, ret_list, result_dict = get_query_by_es(query=str(query).lower(), lat=lat, lng=lng,
offset=offset,
size=size, highlight_query=query,
have_read_tips_set=set(),
sub_index_name=sub_index_name)
if gray_number == 3:
# 在去掉强加权的逻辑上根据词频和tag转化率排序后再前段强加权
......@@ -148,7 +64,8 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
ret_list = equal_data
if len(ret_list) >= 50:
return ret_list[:50]
return ret_list
else:
query_ret_list = []
wordresemble_ret_list = []
......@@ -168,6 +85,7 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
describe = "约" + str(result_num) + "个结果" if result_num else ""
logging.info("get result_num:%s" % result_num)
highlight_marks = u'<ems>%s</ems>' % query
# highlight_name = ori_name.replace(query, highlight_marks)
highlight_name = set_highlihgt(query, ori_name)
if ori_name == query:
query_ret_list.append(
......@@ -187,6 +105,7 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
ret_list.extend(wordresemble_ret_list)
###繁体字删掉,把搜索结果加到简体字上边
fanti_query = [{'痩脸针': "瘦脸针"}]
for item in ret_list:
result_num = [[item['results_num'], list(ret.values())[0], list(ret.keys())[0]] for ret in fanti_query
if list(ret.keys())[0] == item['ori_name']]
......@@ -197,10 +116,32 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
if item['ori_name'] == result_num[0][1]:
item['results_num'] += result_num[0][0]
####
if len(ret_list) >= 50:
return ret_list[0:50]
elif len(ret_list) < 50 and len(ret_list) > 3:
return ret_list
else:
##无结果的时候把汉字转成拼音再搜一次
ss = lazy_pinyin(query)
str_query = ''
for item in ss:
str_query += str(item)
have_read_tips_set, pinyin_ret_list, result_dict = get_query_by_es(query=str_query, lat=lat, lng=lng,
offset=offset,
size=size - len(ret_list),
highlight_query=query,
have_read_tips_set=have_read_tips_set,
sub_index_name=sub_index_name)
ret_list.extend(pinyin_ret_list)
logging.info("get ret_list:%s" % ret_list)
return ret_list
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return list()
......@@ -212,23 +153,116 @@ def set_highlihgt(query=None, ori_name=None):
query2 = ori_name
for item in range(0, len(query)):
all_word.add(query[item])
for item in all_word:
is_find = query2.find(item)
high_query = None
if is_find >= 0:
highlight_marks = u'<ems>%s</ems>' % item
highlight_marks = u'<>%s</>' % item
high_query = query2.replace(item, highlight_marks)
query2 = high_query
if high_query == None:
highlight_name = query2
else:
highlight_name = high_query
highlight_name = query2.replace('<>', '<ems>').replace('</>', '</ems>')
return highlight_name
def get_query_by_es(query='', lat=0, lng=0, size=0, offset=0, highlight_query=None,
have_read_tips_set=None, sub_index_name="suggest"):
try:
query = query.replace("\u2006", '')
q = {
"suggest": {
"tips-suggest": {
"prefix": query,
"completion": {
"field": "suggest",
"size": size,
"contexts": {
"is_online": [True]
},
"fuzzy": {
"fuzziness": 0
}
}
}
},
"_source": {
"includes": ["id", "ori_name", "offline_score", "is_online", "type_flag", "results_num"]
}
}
get_doctor_hospital_data = list()
get_tag_wiki_data = list()
ret_list = list()
doctor_hospital_equal_query = list()
tag_equal_query = list()
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name=sub_index_name, query_body=q,
offset=offset, size=size, is_suggest_request=True)
for tips_item in result_dict["suggest"]["tips-suggest"]:
for hit_item in tips_item["options"]:
logging.info("get hit_item:%s" % hit_item)
if hit_item["_source"]["ori_name"] not in have_read_tips_set:
have_read_tips_set.add(hit_item["_source"]["ori_name"])
highlight_marks = u'<ems>%s</ems>' % query
# hit_item["_source"]["highlight_name"] = hit_item["_source"]["ori_name"].replace(query,
# highlight_marks)
hit_item["_source"]["highlight_name"] = set_highlihgt(highlight_query,
hit_item["_source"]["ori_name"])
if hit_item["_source"]["type_flag"] == "hospital":
if lat is not None and lng is not None and lat != 0.0 and lng != 0.0:
if hit_item["_source"]["ori_name"] in g_hospital_pos_dict:
distance = point_distance(lng, lat,
g_hospital_pos_dict[hit_item["_source"]["ori_name"]][0],
g_hospital_pos_dict[hit_item["_source"]["ori_name"]][1])
if distance < 1000 * 50:
if distance < 1000:
if distance < 100:
hit_item["_source"]["describe"] = "<100" + "米"
else:
hit_item["_source"]["describe"] = "约" + str(int(distance)) + "米"
else:
hit_item["_source"]["describe"] = "约" + str(
round(1.0 * distance / 1000, 1)) + "km"
else:
hit_item["_source"]["describe"] = ">50km"
else:
hit_item["_source"]["describe"] = ""
else:
hit_item["_source"]["describe"] = ""
if hit_item["_source"]["ori_name"] == query:
doctor_hospital_equal_query.append(hit_item["_source"])
else:
get_doctor_hospital_data.append(hit_item["_source"])
else:
if hit_item["_source"]["type_flag"] == "doctor":
hit_item["_source"]["describe"] = ""
if hit_item["_source"]["ori_name"] == query:
doctor_hospital_equal_query.append(hit_item["_source"])
else:
get_doctor_hospital_data.append(hit_item["_source"])
else:
hit_item["_source"]["describe"] = "约" + str(hit_item["_source"]["results_num"]) + "个结果" if \
hit_item["_source"]["results_num"] else ""
if hit_item["_source"]["ori_name"] == query:
tag_equal_query.append(hit_item["_source"])
else:
get_tag_wiki_data.append(hit_item["_source"])
ret_list.extend(tag_equal_query)
ret_list.extend(doctor_hospital_equal_query)
ret_list.extend(get_tag_wiki_data)
ret_list.extend(get_doctor_hospital_data)
return have_read_tips_set, ret_list, result_dict
except:
return set(), list(), list()
def recommed_service_category_device_id(device_id):
try:
'''
......
......@@ -20,6 +20,7 @@ def uuid4():
def get_tips_suggest_list(instance_cn_name):
try:
print(instance_cn_name)
# ch_full_weight = 6.0 * 1000
# py_full_weight = 3.0 * 1000
full_weight = 3.0 * 1000
......
......@@ -33,7 +33,7 @@ class BrandWikiTransfer(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
suggest_list = get_tips_suggest_list(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......@@ -61,7 +61,7 @@ class BrandWikiTransferV1(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(instance.name)
suggest_list = get_tips_suggest_list_v1(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......
......@@ -33,7 +33,7 @@ class CollectWikiTransfer(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
suggest_list = get_tips_suggest_list(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......@@ -61,7 +61,7 @@ class CollectWikiTransferV1(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(instance.name)
suggest_list = get_tips_suggest_list_v1(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......
......@@ -97,7 +97,7 @@ class DoctorTransfer(object):
item_dict["order_weight"] = QueryWordAttr.get_doctor_query_word_weight(instance.name)
item_dict["results_num"] = QueryWordAttr.get_query_results_num(instance.name)
item_dict["type_flag"] = get_tips_word_type(instance.name)
item_dict["type_flag"] = get_tips_word_type(str(instance.name).lower())
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 2
......
......@@ -43,7 +43,7 @@ class HospitalTransfer(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(name)
suggest_list = get_tips_suggest_list(str(name).lower())
return (item_dict, suggest_list)
except:
......@@ -94,7 +94,7 @@ class HospitalTransferV1(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(name)
suggest_list = get_tips_suggest_list_v1(str(name).lower())
return (item_dict, suggest_list)
except:
......
......@@ -97,8 +97,9 @@ class ItemWikiTransfer(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
suggest_list = get_tips_suggest_list(str(instance.name).lower())
logging.info("get suggest_list:%s" % suggest_list)
return (item_dict, suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
......@@ -188,7 +189,7 @@ class ItemWikiTransferV1(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(instance.name)
suggest_list = get_tips_suggest_list_v1(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......
......@@ -33,7 +33,7 @@ class ProduceWikiTransfer(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
suggest_list = get_tips_suggest_list(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......@@ -61,7 +61,7 @@ class ProduceWikiTransferV1(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(instance.name)
suggest_list = get_tips_suggest_list_v1(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......
......@@ -111,7 +111,7 @@ class TagTransfer(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
suggest_list = get_tips_suggest_list(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......@@ -216,7 +216,7 @@ class TagTransferV1(object):
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(instance.name)
suggest_list = get_tips_suggest_list_v1(str(instance.name).lower())
return (item_dict, suggest_list)
except:
......
......@@ -60,7 +60,7 @@ class WordResemble(object):
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 4
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.keyword)
suggest_list = get_tips_suggest_list(str(instance.keyword).lower())
return (item_dict, suggest_list)
......@@ -245,7 +245,7 @@ class WordResembleV1(object):
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 4
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(instance.keyword)
suggest_list = get_tips_suggest_list_v1(str(instance.keyword).lower())
return (item_dict, suggest_list)
......
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