Commit ddc7fbf1 authored by lixiaofang's avatar lixiaofang

Merge branch 'del_weight' into test

parents ca2335a2 eb509b87
......@@ -58,26 +58,26 @@ def point_distance(lon1, lat1, lon2, lat2):
# haversine公式
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
c = 2 * asin(sqrt(a))
r = 6371 # 地球平均半径,单位为km
return c * r * 1000
class HostpitalPosInfo(object):
hospital_pos_dict = dict()
@classmethod
def get_hostpital_info(cls):
try:
if len(cls.hospital_pos_dict) == 0:
query_results = doctor.Hospital.objects.filter(is_online=True)
#query_results = django.db.models.QuerySet(model=doctor.Hospital, query=query)
query_results = doctor.Hospital.objects.filter()
# query_results = django.db.models.QuerySet(model=doctor.Hospital, query=query)
for item in query_results:
name = item.name
lng = float(item.baidu_loc_lng)
lat = float(item.baidu_loc_lat)
cls.hospital_pos_dict[name] = [lng,lat]
cls.hospital_pos_dict[name] = [lng, lat]
return cls.hospital_pos_dict
except:
......@@ -85,4 +85,4 @@ class HostpitalPosInfo(object):
return cls.hospital_pos_dict
g_hospital_pos_dict = HostpitalPosInfo.get_hostpital_info()
\ No newline at end of file
g_hospital_pos_dict = HostpitalPosInfo.get_hostpital_info()
......@@ -31,14 +31,13 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
"""
try:
gray_number = 1
###在原来的逻辑上加两层灰度
gray_number = recommed_service_category_device_id(device_id)
if gray_number == 1:
sub_index_name = "suggest"
size = 50
else:
if device_id in ["057F28DF-20B8-488F-A285-931367FCC110"]:
sub_index_name = "suggest-v1"
size = 30
else:
sub_index_name = "suggest"
have_read_tips_set, ret_list, result_dict = get_query_by_es(query=str(query).lower(), lat=lat, lng=lng,
offset=offset,
......@@ -210,7 +209,8 @@ def get_query_by_es(query='', lat=0, lng=0, size=0, offset=0, highlight_query=No
for tips_item in result_dict["suggest"]["tips-suggest"]:
for hit_item in tips_item["options"]:
hit_item["_source"]["ori_name"] = hit_item["_source"]["ori_name"].replace("超声刀","超声提升")
hit_item["_source"]["ori_name"] = hit_item["_source"]["ori_name"].replace("私密超声刀", "私密超声紧致")
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
......
......@@ -13,7 +13,7 @@ from search.utils.auto_tips import get_suggest_tips
@bind("search_tips/search/auto_complete_query")
def auto_complete_query(q, lat, lng, device_id=None):
def auto_complete_query(q="", lat=0, lng=0, device_id=None):
try:
"""auto complate words/tags/doctors etc.
......
# coding=utf8
from __future__ import unicode_literals, absolute_import, print_function
import logging
import traceback
import json
from libs.cache import redis_client
from trans2es.models.query_word_conversion import TagConversion, DoctorConversion, HospitalConversion
from trans2es.models.strategy_search_word import StrategyHistoryQueryWords
from libs.cache import redis_client
import base64
from gm_types.doris import MIND_TYPE
from gm_rpcd.all import bind
QUERY_KEY = "query:{}:set"
LABEL_VALUE = {
MIND_TYPE.PROJECT: 8,
MIND_TYPE.HOSPITAL: 7,
MIND_TYPE.DOCTOR: 6,
MIND_TYPE.FREE_FACE: 4,
MIND_TYPE.FACE: 3,
MIND_TYPE.AREA: 2,
MIND_TYPE.USER: 1,
MIND_TYPE.UNKNOWN: 0
}
QUERY_WORD_LABEL_NEED_MODIFIED = {
u"玻尿酸": MIND_TYPE.PROJECT,
u"鼻": MIND_TYPE.PROJECT,
u"眼": MIND_TYPE.PROJECT,
u"嘴": MIND_TYPE.PROJECT,
u"脱毛": MIND_TYPE.PROJECT
}
class TagTab(object):
......@@ -99,6 +123,18 @@ class QueryWordAttr(object):
@classmethod
def get_hot_search_query_word_weight(cls, name):
try:
search_info = StrategyHistoryQueryWords.objects.filter(keyword=name).first()
weight = int(0.0001 * (
search_info.search_num * 0.8 + 0.2 * (search_info.answer_num + search_info.tractate_num + search_info.diary_num)))
return weight
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return 0.0
@classmethod
def get_hot_search_query_word_weight_v1(cls, name):
try:
search_num = StrategyHistoryQueryWords.objects.filter(keyword=name).values_list(
"search_num", flat=True).first()
......@@ -129,12 +165,13 @@ class QueryWordAttr(object):
return 0.0
@classmethod
def get_doctor_query_word_weight(cls, name):
def get_doctor_query_word_weight(cls, name=None, doctor_id=None):
try:
if not cls.doctor_latest_date:
cls.doctor_latest_date = DoctorConversion.objects.latest('update_date').update_date
doc_query_results = DoctorConversion.objects.filter(query=name, update_date=cls.doctor_latest_date)
doc_query_results = DoctorConversion.objects.filter(business_id=doctor_id,
update_date=cls.doctor_latest_date)
total_score = 0.0
for query_item in doc_query_results:
......@@ -147,12 +184,13 @@ class QueryWordAttr(object):
return 0.0
@classmethod
def get_hospital_query_word_weight(cls, name):
def get_hospital_query_word_weight(cls, name=None, hospital_id=None):
try:
if not cls.hospital_latest_date:
cls.hospital_latest_date = HospitalConversion.objects.latest('update_date').update_date
hospital_query_results = HospitalConversion.objects.filter(query=name, update_date=cls.hospital_latest_date)
hospital_query_results = HospitalConversion.objects.filter(business_id=hospital_id,
update_date=cls.hospital_latest_date)
total_score = 0.0
for query_item in hospital_query_results:
......@@ -186,6 +224,7 @@ class QueryWordAttr(object):
if data:
for value in data.values():
total_num += value
return total_num
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
......@@ -252,33 +291,6 @@ class QueryWordAttr(object):
return False
from gm_rpcd.all import bind
from libs.cache import redis_client
import base64
from gm_types.doris import MIND_TYPE
QUERY_KEY = "query:{}:set"
LABEL_VALUE = {
MIND_TYPE.PROJECT: 8,
MIND_TYPE.HOSPITAL: 7,
MIND_TYPE.DOCTOR: 6,
MIND_TYPE.FREE_FACE: 4,
MIND_TYPE.FACE: 3,
MIND_TYPE.AREA: 2,
MIND_TYPE.USER: 1,
MIND_TYPE.UNKNOWN: 0
}
QUERY_WORD_LABEL_NEED_MODIFIED = {
u"玻尿酸": MIND_TYPE.PROJECT,
u"鼻": MIND_TYPE.PROJECT,
u"眼": MIND_TYPE.PROJECT,
u"嘴": MIND_TYPE.PROJECT,
u"脱毛": MIND_TYPE.PROJECT
}
def label_key(label):
return LABEL_VALUE.get(label)
......
......@@ -94,7 +94,8 @@ class DoctorTransfer(object):
item_dict["id"] = getMd5Digest(str(instance.name))
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = QueryWordAttr.get_doctor_query_word_weight(instance.name)
item_dict["order_weight"] = QueryWordAttr.get_doctor_query_word_weight(name=instance.name,
doctor_id=instance.id)
item_dict["results_num"] = QueryWordAttr.get_query_results_num(instance.name)
item_dict["type_flag"] = get_tips_word_type(str(instance.name).lower())
item_dict["offline_score"] = 0.0
......@@ -190,7 +191,8 @@ class DoctorTransferV1(object):
item_dict["id"] = getMd5Digest(str(instance.name))
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = QueryWordAttr.get_doctor_query_word_weight(instance.name)
item_dict["order_weight"] = QueryWordAttr.get_doctor_query_word_weight(name=instance.name,
doctor_id=instance.id)
item_dict["results_num"] = QueryWordAttr.get_query_results_num(instance.name)
item_dict["type_flag"] = get_tips_word_type(instance.name)
item_dict["offline_score"] = 0.0
......@@ -201,5 +203,3 @@ class DoctorTransferV1(object):
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return (dict(), list())
......@@ -20,11 +20,8 @@ class HospitalTransfer(object):
try:
ret_list = list()
name = instance.name.strip()
sub_query = re.sub('\W+', '', name)
name = sub_query
cut_bool = False
cut_word = ["下线", "停用", "已经下线", "账号停用"]
for i in cut_word:
if name.find(i) >= 0:
cut_bool = True
......@@ -36,9 +33,9 @@ class HospitalTransfer(object):
item_dict["id"] = getMd5Digest(str(name))
item_dict["ori_name"] = name
item_dict["is_online"] = by_hospital_id_judge_office_online(is_online=instance.is_online,
hospital_id=instance.id)
item_dict["order_weight"] = QueryWordAttr.get_hospital_query_word_weight(name)
hospital_id=instance.id, name=name)
item_dict["order_weight"] = QueryWordAttr.get_hospital_query_word_weight(name=name,
hospital_id=instance.id)
item_dict["results_num"] = QueryWordAttr.get_query_results_num(name)
item_dict["type_flag"] = get_tips_word_type(name)
item_dict["offline_score"] = 0.0
......@@ -73,7 +70,6 @@ class HospitalTransferV1(object):
def get_hospital_suggest_data_list(cls, instance):
try:
ret_list = list()
name = instance.name.strip()
cut_bool = False
cut_word = ["下线", "停用", "已经下线", "账号停用"]
......@@ -88,9 +84,10 @@ class HospitalTransferV1(object):
item_dict["id"] = getMd5Digest(str(name))
item_dict["ori_name"] = name
item_dict["is_online"] = by_hospital_id_judge_office_online(is_online=instance.is_online,
hospital_id=instance.id)
hospital_id=instance.id, name=name)
item_dict["order_weight"] = QueryWordAttr.get_hospital_query_word_weight(name)
item_dict["order_weight"] = QueryWordAttr.get_hospital_query_word_weight(name=name,
hospital_id=instance.id)
item_dict["results_num"] = QueryWordAttr.get_query_results_num(name)
item_dict["type_flag"] = get_tips_word_type(name)
item_dict["offline_score"] = 0.0
......@@ -119,10 +116,10 @@ class HospitalTransferV1(object):
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
def by_hospital_id_judge_office_online(is_online=False, hospital_id=None):
def by_hospital_id_judge_office_online(is_online=False, hospital_id=None, name=None):
try:
office = Doctor.objects.filter(hospital_id=hospital_id, is_online=True, doctor_type=1)
if office and is_online:
office = Doctor.objects.filter(is_online=True, doctor_type=1, hospital_id=hospital_id)
if office:
return True
return False
except:
......
......@@ -70,23 +70,91 @@ class TagTransfer(object):
sub_index_name="service", doc_type="service", query_body=q,
offset=0, size=0)
doctor_results = result_dict["total_count"]
service_results = result_dict["total_count"]
if service_results == 0:
service_results = cls.get_content_results_to_redis(instance=instance)
redis_data = redis_client.hget(cls.tips_num_redis_key_prefix, tag_name)
redis_val_dict = json.loads(str(redis_data, encoding="utf-8")) if redis_data else {}
total_count = doctor_results
total_count = service_results
if 't' in redis_val_dict:
total_count += int(redis_val_dict['t'])
redis_val_dict['t'] = total_count
redis_val_dict['s'] = doctor_results
redis_val_dict['s'] = service_results
redis_client.hset(cls.tips_num_redis_key_prefix, tag_name, json.dumps(redis_val_dict))
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
@classmethod
def get_content_results_to_redis(cls, instance):
try:
word = instance.name.strip()
answer_query = {
"query": {
"bool": {
"minimum_should_match": 1,
"should": [{"match_phrase": {"title": {"query": word, "analyzer": "gm_default_index"}}},
{"match_phrase": {"desc": {"query": word, "analyzer": "gm_default_index"}}},
{"match_phrase": {"answer": {"query": word, "analyzer": "gm_default_index"}}}],
"must": [{"term": {"is_online": True}}]
}
}
}
answer_result_dict = ESPerform.get_search_results(ESPerform.get_cli(settings.GM_ORI_ES_INFO_LIST),
sub_index_name="answer", doc_type="answer",
query_body=answer_query,
offset=0, size=0)
answer_results = answer_result_dict["total_count"]
tractate_query = {
"query": {
"bool": {
"minimum_should_match": 1,
"should": [{"match_phrase": {"content": {"query": word, "analyzer": "gm_default_index"}}}, {
"match_phrase": {"tractate_tag_name": {"query": word, "analyzer": "gm_default_index"}}}, {
"match_phrase": {"tractate_tag_name_content": {"query": word,
"analyzer": "gm_default_index"}}}],
"must": [{"term": {"is_online": True}}]
}
}
}
tractate_result_dict = ESPerform.get_search_results(ESPerform.get_cli(settings.GM_ORI_ES_INFO_LIST),
sub_index_name="tractate", doc_type="tractate",
query_body=tractate_query,
offset=0, size=0)
tractate_results = tractate_result_dict["total_count"]
diary_query = {
"query": {
"bool": {
"minimum_should_match": 1,
"should": [{"match_phrase": {"tags": {"query": word, "analyzer": "gm_default_index"}}},
{"match_phrase": {"answer": {"query": word, "analyzer": "gm_default_index"}}},
{"match_phrase": {"service.name": {"query": word, "analyzer": "gm_default_index"}}}],
"must": [{"term": {"is_online": True}}, {"range": {"content_level": {"gte": "3"}}}]
}
},
}
diary_result_dict = ESPerform.get_search_results(ESPerform.get_cli(settings.GM_ORI_ES_INFO_LIST),
sub_index_name="diary", doc_type="diary",
query_body=diary_query,
offset=0, size=0)
diary_results = diary_result_dict["total_count"]
total_count = int(answer_results) + int(tractate_results) + int(diary_results)
logging.info("get content_info:%s" % total_count)
return total_count
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return 0
@classmethod
def get_tag_suggest_data_list(cls, instance):
try:
......
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