Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
search_tips
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rank
search_tips
Commits
ddc7fbf1
Commit
ddc7fbf1
authored
Apr 26, 2020
by
lixiaofang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'del_weight' into test
parents
ca2335a2
eb509b87
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
142 additions
and
66 deletions
+142
-66
tools.py
libs/tools.py
+6
-7
auto_tips.py
search/utils/auto_tips.py
+7
-7
auto_tips.py
search/view/auto_tips.py
+1
-1
words_utils.py
trans2es/commons/words_utils.py
+44
-32
doctor_transfer.py
trans2es/utils/doctor_transfer.py
+4
-4
hospital_transfer.py
trans2es/utils/hospital_transfer.py
+9
-12
tag_transfer.py
trans2es/utils/tag_transfer.py
+71
-3
No files found.
libs/tools.py
View file @
ddc7fbf1
...
...
@@ -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
()
search/utils/auto_tips.py
View file @
ddc7fbf1
...
...
@@ -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
...
...
search/view/auto_tips.py
View file @
ddc7fbf1
...
...
@@ -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.
...
...
trans2es/commons/words_utils.py
View file @
ddc7fbf1
# 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
)
...
...
trans2es/utils/doctor_transfer.py
View file @
ddc7fbf1
...
...
@@ -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
())
trans2es/utils/hospital_transfer.py
View file @
ddc7fbf1
...
...
@@ -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
:
...
...
trans2es/utils/tag_transfer.py
View file @
ddc7fbf1
...
...
@@ -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
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment