Commit dbf52cb1 authored by 段英荣's avatar 段英荣

Merge branch 'sug_sort' into 'master'

Sug sort

See merge request !23
parents f76cff30 0753b3a7
...@@ -16,6 +16,80 @@ from trans2es.commons.words_utils import QueryWordAttr, get_tips_word_type ...@@ -16,6 +16,80 @@ from trans2es.commons.words_utils import QueryWordAttr, get_tips_word_type
def get_suggest_tips(query, lat, lng, offset=0, size=50): def get_suggest_tips(query, lat, lng, offset=0, size=50):
try: try:
###先获取完全命中的query
# qq = {
# "query": {
# "bool": {
# "must": [{
# "term": {
# "ori_name": query
# }
# }, {
# "term": {
# "is_online": True
# }
# }]
# }
# }
# }
# logging.info("get qqqqqqqqq:%s" % qq)
# whole_query = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="suggest", query_body=qq,
# offset=0, size=1, is_suggest_request=True)
#
# logging.info("get whole_query:%s" % whole_query)
# hits = whole_query["hits"]["hits"]
#
# for item in hits:
# have_read_tips_set.add(item["_source"]["ori_name"])
# id = item["_source"]["id"]
# ori_name = item["_source"]["ori_name"]
# results_num = item["_source"]["results_num"]
# is_online = item["_source"]["is_online"]
# offline_score = item["_source"]["offline_score"]
# type_flag = item["_source"]["type_flag"]
#
# highlight_marks = u'<ems>%s</ems>' % query
# item["_source"]["highlight_name"] = item["_source"]["ori_name"].replace(query, highlight_marks)
# highlight_name = item["_source"]["highlight_name"]
# if item["_source"]["type_flag"] == "hospital":
# if lat is not None and lng is not None and lat != 0.0 and lng != 0.0:
#
# logging.info("get g_hospital_pos_dict:%s" % g_hospital_pos_dict)
# if item["_source"]["ori_name"] in g_hospital_pos_dict:
# distance = point_distance(lng, lat,
# g_hospital_pos_dict[item["_source"]["ori_name"]][0],
# g_hospital_pos_dict[item["_source"]["ori_name"]][1])
# if distance < 1000 * 50:
# if distance < 1000:
# if distance < 100:
# item["_source"]["describe"] = "<100" + "米"
# else:
# item["_source"]["describe"] = "约" + str(int(distance)) + "米"
# else:
# item["_source"]["describe"] = "约" + str(
# round(1.0 * distance / 1000, 1)) + "km"
# else:
# item["_source"]["describe"] = ">50km"
# else:
# item["_source"]["describe"] = ""
#
# else:
# item["_source"]["describe"] = ""
# else:
# if item["_source"]["type_flag"] == "doctor":
# item["_source"]["describe"] = ""
# else:
# item["_source"]["describe"] = "约" + str(item["_source"]["results_num"]) + "个结果" if \
# item["_source"]["results_num"] else ""
#
# ret_list.append({"offline_score": offline_score, "ori_name": ori_name, "results_num": results_num, "id": id,
# "highlight_name": highlight_name, "type_flag": type_flag,
# "is_online": is_online})
###获取联想到的数据
# ios输入法在某些情况下会携带\\u2006 # ios输入法在某些情况下会携带\\u2006
query = query.replace("\u2006", '') query = query.replace("\u2006", '')
q = { q = {
...@@ -38,7 +112,8 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50): ...@@ -38,7 +112,8 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50):
"includes": ["id", "ori_name", "offline_score", "is_online", "type_flag", "results_num"] "includes": ["id", "ori_name", "offline_score", "is_online", "type_flag", "results_num"]
} }
} }
logging.info("get qqqqqqqq:%s" % q) get_doctor_hospital_data = list()
get_tag_wiki_data = list()
have_read_tips_set = set() have_read_tips_set = set()
ret_list = list() ret_list = list()
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="suggest", query_body=q, result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="suggest", query_body=q,
...@@ -75,13 +150,20 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50): ...@@ -75,13 +150,20 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50):
else: else:
hit_item["_source"]["describe"] = "" hit_item["_source"]["describe"] = ""
get_doctor_hospital_data.append(hit_item["_source"])
else: else:
if hit_item["_source"]["type_flag"] == "doctor": if hit_item["_source"]["type_flag"] == "doctor":
hit_item["_source"]["describe"] = "" hit_item["_source"]["describe"] = ""
get_doctor_hospital_data.append(hit_item["_source"])
else: else:
hit_item["_source"]["describe"] = "约" + str(hit_item["_source"]["results_num"]) + "个结果" if \ hit_item["_source"]["describe"] = "约" + str(hit_item["_source"]["results_num"]) + "个结果" if \
hit_item["_source"]["results_num"] else "" hit_item["_source"]["results_num"] else ""
ret_list.append(hit_item["_source"]) get_tag_wiki_data.append(hit_item["_source"])
ret_list.extend(get_tag_wiki_data)
ret_list.extend(get_doctor_hospital_data)
if len(result_dict["suggest"]["tips-suggest"]) >= 50: if len(result_dict["suggest"]["tips-suggest"]) >= 50:
return ret_list return ret_list
...@@ -95,6 +177,7 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50): ...@@ -95,6 +177,7 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50):
ori = i.split(":")[0] ori = i.split(":")[0]
ori_name = base64.b64decode(ori.encode('utf8')).decode('utf8') ori_name = base64.b64decode(ori.encode('utf8')).decode('utf8')
if ori_name not in have_read_tips_set: if ori_name not in have_read_tips_set:
have_read_tips_set.add(ori_name)
result_num = i.split(":")[1] result_num = i.split(":")[1]
ret_list.append( ret_list.append(
{"results_num": result_num, "ori_name": ori_name, "id": None, "is_online": True, {"results_num": result_num, "ori_name": ori_name, "id": None, "is_online": True,
......
...@@ -17,7 +17,6 @@ def uuid4(): ...@@ -17,7 +17,6 @@ def uuid4():
""" """
return uuid.uuid4().hex return uuid.uuid4().hex
def get_tips_suggest_list(instance_cn_name): def get_tips_suggest_list(instance_cn_name):
try: try:
# ch_full_weight = 6.0 * 1000 # ch_full_weight = 6.0 * 1000
......
...@@ -210,18 +210,19 @@ class TypeInfo(object): ...@@ -210,18 +210,19 @@ class TypeInfo(object):
es=es, es=es,
) )
def insert_table_by_pk_list(self, sub_index_name, pk_list, es=None, use_batch_query_set=False,es_type=None): def insert_table_by_pk_list(self, sub_index_name, pk_list, es=None, use_batch_query_set=False, es_type=None):
if use_batch_query_set: if use_batch_query_set:
qs = self.queryset qs = self.queryset
else: else:
qs = self.model.objects.all() qs = self.model.objects.all()
if es_type == "doctor_tips": if es_type == "doctor_tips":
instance_list = qs.filter(pk__in=pk_list,doctor_type=DOCTOR_TYPE.DOCTOR) instance_list = qs.filter(pk__in=pk_list, doctor_type=DOCTOR_TYPE.DOCTOR)
elif es_type == "wordrel_tips": elif es_type == "wordrel_tips":
instance_list = qs.filter(pk__in=pk_list, category__in=[13, 12, 11, 9, 1]) instance_list = qs.filter(pk__in=pk_list, category__in=[13, 12, 11, 9, 1])
elif es_type == "tag_tips": elif es_type == "tag_tips":
instance_list = qs.filter(pk__in=pk_list, tag_type__in=[TAG_TYPE.BODY_PART, TAG_TYPE.BODY_PART_SUB_ITEM, TAG_TYPE.ITEM_WIKI]) instance_list = qs.filter(pk__in=pk_list, tag_type__in=[TAG_TYPE.BODY_PART, TAG_TYPE.BODY_PART_SUB_ITEM,
TAG_TYPE.ITEM_WIKI])
else: else:
instance_list = qs.filter(pk__in=pk_list) instance_list = qs.filter(pk__in=pk_list)
...@@ -540,7 +541,7 @@ def tips_attr_sync_to_redis_type_info_map(): ...@@ -540,7 +541,7 @@ def tips_attr_sync_to_redis_type_info_map():
type='wordrel_results_num', # api_wordrelresemble type='wordrel_results_num', # api_wordrelresemble
model=doctor.Hospital, model=doctor.Hospital,
query_deferred=lambda: wordresemble.WordRel.objects.filter( query_deferred=lambda: wordresemble.WordRel.objects.filter(
category__in=[0, 1, 2, 9, 10, 11, 12, 13, 14, 15, 16, 17]).query, category__in=[13, 12, 11, 9, 1]).query,
get_data_func=WordResemble.get_all_data_name_mapping_results_to_redis, get_data_func=WordResemble.get_all_data_name_mapping_results_to_redis,
bulk_insert_chunk_size=100, bulk_insert_chunk_size=100,
round_insert_chunk_size=5, round_insert_chunk_size=5,
...@@ -551,7 +552,7 @@ def tips_attr_sync_to_redis_type_info_map(): ...@@ -551,7 +552,7 @@ def tips_attr_sync_to_redis_type_info_map():
type='wordresemble_results_num', # api_wordrelresemble type='wordresemble_results_num', # api_wordrelresemble
model=doctor.Hospital, model=doctor.Hospital,
query_deferred=lambda: wordresemble.WordRel.objects.filter( query_deferred=lambda: wordresemble.WordRel.objects.filter(
category__in=[0, 1, 2, 9, 10, 11, 12, 13, 14, 15, 16, 17]).query, category__in=[13, 12, 11, 9, 1]).query,
get_data_func=WordResemble.set_data_to_redis, get_data_func=WordResemble.set_data_to_redis,
bulk_insert_chunk_size=100, bulk_insert_chunk_size=100,
round_insert_chunk_size=5, round_insert_chunk_size=5,
......
...@@ -155,9 +155,6 @@ class WordResemble(object): ...@@ -155,9 +155,6 @@ class WordResemble(object):
QUERY_KEY = "query:{}:search_tip" QUERY_KEY = "query:{}:search_tip"
tips_num_redis_key_prefix = "search_tips:tips_mapping_num" tips_num_redis_key_prefix = "search_tips:tips_mapping_num"
# result = wordresemble.WordRel.objects.all().values("keyword", "id")
# for wordrm in result:
query_sql_item = wordresemble.WordRel.objects.filter(keyword=instance.keyword) query_sql_item = wordresemble.WordRel.objects.filter(keyword=instance.keyword)
for sql_obj in query_sql_item: for sql_obj in query_sql_item:
words = list(sql_obj.all_resembles.all().values_list('word', flat=True)) words = list(sql_obj.all_resembles.all().values_list('word', flat=True))
...@@ -166,14 +163,13 @@ class WordResemble(object): ...@@ -166,14 +163,13 @@ class WordResemble(object):
query_base64 = base64.b64encode(instance.keyword.encode('utf8')).decode('utf8') query_base64 = base64.b64encode(instance.keyword.encode('utf8')).decode('utf8')
key = QUERY_KEY.format(query_base64) key = QUERY_KEY.format(query_base64)
value_name = base64.b64encode(items.encode('utf8')).decode('utf8') value_name = base64.b64encode(items.encode('utf8')).decode('utf8')
# 获取本体词的结果 # 获取本体词的结果
redis_data = redis_client.hget(tips_num_redis_key_prefix, items) redis_data = redis_client.hget(tips_num_redis_key_prefix, items)
logging.info("get redis_data:%s" % redis_data)
redis_val_dict = json.loads(str(redis_data, encoding="utf-8")) if redis_data else {} redis_val_dict = json.loads(str(redis_data, encoding="utf-8")) if redis_data else {}
total_count = 0 total_count = 0
if 't' in redis_val_dict: if 't' in redis_val_dict:
total_count = int(redis_val_dict['t']) total_count = int(redis_val_dict['t'])
# 存储到Redis # 存储到Redis
value = value_name + str(":" + str(total_count)) value = value_name + str(":" + str(total_count))
redis_client.sadd(key, value) redis_client.sadd(key, value)
......
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