Commit d688562c authored by lixiaofang's avatar lixiaofang

add

parent 30985760
......@@ -17,80 +17,77 @@ from trans2es.commons.words_utils import QueryWordAttr, get_tips_word_type
def get_suggest_tips(query, lat, lng, offset=0, size=50):
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)
have_read_tips_set = set()
ret_list = list()
get_doctor_hospital_data = list()
get_tag_wiki_data = list()
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})
# 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
......@@ -115,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"]
}
}
logging.info("get qqqqqqqq:%s" % q)
get_doctor_hospital_data = list()
get_tag_wiki_data = list()
have_read_tips_set = set()
ret_list = list()
result_dict = ESPerform.get_search_results(ESPerform.get_cli(), sub_index_name="suggest", query_body=q,
......@@ -164,8 +162,6 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50):
hit_item["_source"]["results_num"] else ""
get_tag_wiki_data.append(hit_item["_source"])
logging.info("get get_doctor_hospital_data:%s" % get_doctor_hospital_data)
logging.info("get get_tag_wiki_data:%s" % get_tag_wiki_data)
ret_list.extend(get_tag_wiki_data)
ret_list.extend(get_doctor_hospital_data)
......@@ -181,6 +177,7 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50):
ori = i.split(":")[0]
ori_name = base64.b64decode(ori.encode('utf8')).decode('utf8')
if ori_name not in have_read_tips_set:
have_read_tips_set.add(ori_name)
result_num = i.split(":")[1]
ret_list.append(
{"results_num": result_num, "ori_name": ori_name, "id": None, "is_online": True,
......
......@@ -210,18 +210,19 @@ class TypeInfo(object):
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:
qs = self.queryset
else:
qs = self.model.objects.all()
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":
instance_list = qs.filter(pk__in=pk_list, category__in=[13, 12, 11, 9, 1])
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:
instance_list = qs.filter(pk__in=pk_list)
......@@ -540,7 +541,7 @@ def tips_attr_sync_to_redis_type_info_map():
type='wordrel_results_num', # api_wordrelresemble
model=doctor.Hospital,
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,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
......@@ -551,7 +552,7 @@ def tips_attr_sync_to_redis_type_info_map():
type='wordresemble_results_num', # api_wordrelresemble
model=doctor.Hospital,
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,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
......
......@@ -156,9 +156,8 @@ class WordResemble(object):
QUERY_KEY = "query:{}:search_tip"
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)
for sql_obj in query_sql_item:
words = list(sql_obj.all_resembles.all().values_list('word', flat=True))
for items in words:
......@@ -169,6 +168,7 @@ class WordResemble(object):
# 获取本体词的结果
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 {}
total_count = 0
if 't' in redis_val_dict:
......@@ -177,6 +177,8 @@ class WordResemble(object):
# 存储到Redis
value = value_name + str(":" + str(total_count))
redis_client.sadd(key, value)
logging.info("get value:%s" % value)
# 存储近义词
# query_base64 = base64.b64encode(items.encode('utf8')).decode('utf8')
......@@ -191,16 +193,19 @@ class WordResemble(object):
total_count = int(redis_val_dict['t'])
# 存储结果
value = value_names + str(":" + str(total_count))
redis_client.sadd(key, value)
if words:
for w in words:
value_name_w = base64.b64encode(w.encode('utf8')).decode('utf8')
redis_data = redis_client.hget(tips_num_redis_key_prefix, w)
redis_val_dict = json.loads(str(redis_data, encoding="utf-8")) if redis_data else {}
total_count = 0
if 't' in redis_val_dict:
total_count = int(redis_val_dict['t'])
value = value_name_w + str(":" + str(total_count))
redis_client.sadd(key, value)
except:
......
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