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
c940d41a
Commit
c940d41a
authored
Jan 28, 2019
by
段英荣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify
parent
b81a5e09
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
90 additions
and
7 deletions
+90
-7
tools.py
libs/tools.py
+45
-0
auto_tips.py
search/utils/auto_tips.py
+18
-4
auto_tips.py
search/view/auto_tips.py
+0
-1
views.py
search/views.py
+3
-1
trans2es_tipsdata2es.py
trans2es/management/commands/trans2es_tipsdata2es.py
+1
-1
type_info.py
trans2es/type_info.py
+10
-0
hospital_transfer.py
trans2es/utils/hospital_transfer.py
+13
-0
No files found.
libs/tools.py
View file @
c940d41a
...
@@ -7,6 +7,10 @@ from datetime import datetime
...
@@ -7,6 +7,10 @@ from datetime import datetime
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
import
json
import
json
import
hashlib
import
hashlib
from
trans2es.models
import
doctor
import
logging
import
traceback
from
math
import
radians
,
cos
,
sin
,
asin
,
sqrt
def
tzlc
(
dt
,
truncate_to_sec
=
True
):
def
tzlc
(
dt
,
truncate_to_sec
=
True
):
...
@@ -40,3 +44,43 @@ def getMd5Digest(ori_content):
...
@@ -40,3 +44,43 @@ def getMd5Digest(ori_content):
m5
=
hashlib
.
md5
()
m5
=
hashlib
.
md5
()
m5
.
update
(
ori_content
.
encode
(
"utf-8"
))
m5
.
update
(
ori_content
.
encode
(
"utf-8"
))
return
m5
.
hexdigest
()
return
m5
.
hexdigest
()
def
point_distance
(
lon1
,
lat1
,
lon2
,
lat2
):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# 将十进制度数转化为弧度
lon1
,
lat1
,
lon2
,
lat2
=
map
(
radians
,
[
lon1
,
lat1
,
lon2
,
lat2
])
# haversine公式
dlon
=
lon2
-
lon1
dlat
=
lat2
-
lat1
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
.
all
()
.
query
for
item
in
query_results
:
name
=
item
.
name
lng
=
item
.
baidu_loc_lng
lat
=
item
.
baidu_loc_lat
cls
.
hospital_pos_dict
[
name
]
=
[
lng
,
lat
]
return
cls
.
hospital_pos_dict
except
:
logging
.
error
(
"catch exception,err_msg:
%
s"
%
traceback
.
format_exc
())
return
cls
.
hospital_pos_dict
g_hospital_pos_dict
=
HostpitalPosInfo
.
get_hostpital_info
()
\ No newline at end of file
search/utils/auto_tips.py
View file @
c940d41a
...
@@ -8,10 +8,11 @@ import traceback
...
@@ -8,10 +8,11 @@ import traceback
import
json
import
json
from
libs.es
import
ESPerform
from
libs.es
import
ESPerform
from
libs.cache
import
redis_client
from
libs.cache
import
redis_client
from
libs.tools
import
g_hospital_pos_dict
from
libs.tools
import
point_distance
def
get_suggest_tips
(
query
,
lat
,
lng
,
offset
=
0
,
size
=
100
):
def
get_suggest_tips
(
query
,
offset
=
0
,
size
=
100
):
try
:
try
:
q
=
{
q
=
{
"suggest"
:{
"suggest"
:{
...
@@ -39,9 +40,22 @@ def get_suggest_tips(query,offset=0,size=100):
...
@@ -39,9 +40,22 @@ def get_suggest_tips(query,offset=0,size=100):
hit_item
[
"_source"
][
"highlight_name"
]
=
hit_item
[
"_source"
][
"ori_name"
]
.
replace
(
query
,
highlight_marks
)
hit_item
[
"_source"
][
"highlight_name"
]
=
hit_item
[
"_source"
][
"ori_name"
]
.
replace
(
query
,
highlight_marks
)
if
hit_item
[
"_source"
][
"type_flag"
]
==
"hospital"
:
if
hit_item
[
"_source"
][
"type_flag"
]
==
"hospital"
:
hit_item
[
"_source"
][
"describe"
]
=
"6.5km"
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
*
10000
:
if
distance
<
1000
:
if
distance
<
100
:
hit_item
[
"_source"
][
"describe"
]
=
"<100"
+
"米"
else
:
hit_item
[
"_source"
][
"describe"
]
=
"约"
+
str
(
distance
)
+
"米"
else
:
hit_item
[
"_source"
][
"describe"
]
=
"约"
+
str
(
1.0
*
distance
/
1000
)
+
"km"
else
:
hit_item
[
"_source"
][
"describe"
]
=
">1000km"
else
:
hit_item
[
"_source"
][
"describe"
]
=
""
else
:
else
:
hit_item
[
"_source"
][
"describe"
]
=
"约"
+
str
(
hit_item
[
"_source"
][
"results_num"
])
+
"结果"
if
hit_item
[
"_source"
][
"results_num"
]
else
""
hit_item
[
"_source"
][
"describe"
]
=
"约"
+
str
(
hit_item
[
"_source"
][
"results_num"
])
+
"
个
结果"
if
hit_item
[
"_source"
][
"results_num"
]
else
""
ret_list
.
append
(
hit_item
[
"_source"
])
ret_list
.
append
(
hit_item
[
"_source"
])
return
ret_list
return
ret_list
...
...
search/view/auto_tips.py
View file @
c940d41a
...
@@ -13,7 +13,6 @@ from search.utils.auto_tips import get_suggest_tips
...
@@ -13,7 +13,6 @@ from search.utils.auto_tips import get_suggest_tips
@bind
(
"search_tips/search/auto_complete_query"
)
@bind
(
"search_tips/search/auto_complete_query"
)
def
auto_complete_query
(
q
):
def
auto_complete_query
(
q
):
try
:
try
:
...
...
search/views.py
View file @
c940d41a
...
@@ -26,11 +26,13 @@ def auto_complete(request):
...
@@ -26,11 +26,13 @@ def auto_complete(request):
"""
"""
q
=
request
.
GET
.
get
(
'q'
,
''
)
.
strip
()
q
=
request
.
GET
.
get
(
'q'
,
''
)
.
strip
()
lat
=
request
.
GET
.
get
(
'lat'
,
0
)
.
strip
()
lng
=
request
.
GET
.
get
(
'lng'
,
0
)
.
strip
()
if
not
q
:
if
not
q
:
return
json_http_response
({
'error'
:
0
,
'data'
:
[]})
return
json_http_response
({
'error'
:
0
,
'data'
:
[]})
data
=
get_suggest_tips
(
q
)
data
=
get_suggest_tips
(
q
,
lat
,
lng
)
result
=
{
result
=
{
'error'
:
0
,
'error'
:
0
,
...
...
trans2es/management/commands/trans2es_tipsdata2es.py
View file @
c940d41a
...
@@ -44,7 +44,7 @@ class Command(BaseCommand):
...
@@ -44,7 +44,7 @@ class Command(BaseCommand):
if
len
(
options
[
"type"
]):
if
len
(
options
[
"type"
]):
if
options
[
"type"
]
==
"all"
or
type_name
==
options
[
"type"
]:
if
options
[
"type"
]
==
"all"
or
type_name
==
options
[
"type"
]:
logging
.
info
(
"begin sync [
%
s] data to
e
s!"
%
type_name
)
logging
.
info
(
"begin sync [
%
s] data to
redi
s!"
%
type_name
)
type_info
=
tips_attr_sync_to_redis_type_info_map
()[
type_name
]
type_info
=
tips_attr_sync_to_redis_type_info_map
()[
type_name
]
query_set
=
type_info
.
queryset
query_set
=
type_info
.
queryset
...
...
trans2es/type_info.py
View file @
c940d41a
...
@@ -392,6 +392,16 @@ def tips_attr_sync_to_redis_type_info_map():
...
@@ -392,6 +392,16 @@ def tips_attr_sync_to_redis_type_info_map():
bulk_insert_chunk_size
=
100
,
bulk_insert_chunk_size
=
100
,
round_insert_chunk_size
=
5
,
round_insert_chunk_size
=
5
,
round_insert_period
=
2
,
round_insert_period
=
2
,
),
TypeInfo
(
name
=
'suggest'
,
type
=
'hospital_latlng'
,
# hospital_pos_info
model
=
doctor
.
Hospital
,
query_deferred
=
lambda
:
doctor
.
Hospital
.
objects
.
all
()
.
query
,
get_data_func
=
HospitalTransfer
.
get_hospital_lat_lng_info_to_redis
,
bulk_insert_chunk_size
=
100
,
round_insert_chunk_size
=
5
,
round_insert_period
=
2
,
)
)
]
]
...
...
trans2es/utils/hospital_transfer.py
View file @
c940d41a
...
@@ -42,3 +42,16 @@ class HospitalTransfer(object):
...
@@ -42,3 +42,16 @@ class HospitalTransfer(object):
except
:
except
:
logging
.
error
(
"catch exception,err_msg:
%
s"
%
traceback
.
format_exc
())
logging
.
error
(
"catch exception,err_msg:
%
s"
%
traceback
.
format_exc
())
return
([],[])
return
([],[])
@classmethod
def
get_hospital_lat_lng_info_to_redis
(
cls
,
instance
):
try
:
redis_key_prefix
=
"search_tips:hospital_latlng_info"
name
=
instance
.
name
lng
=
instance
.
baidu_loc_lng
lat
=
instance
.
baidu_loc_lat
pos_list
=
[
lng
,
lat
]
redis_client
.
hset
(
redis_key_prefix
,
name
,
pos_list
)
except
:
logging
.
error
(
"catch exception,err_msg:
%
s"
%
traceback
.
format_exc
())
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