微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
SpringCloud微服务架构
文章目录
- 微服务框架
- SpringCloud微服务架构
- 22 DSL 查询语法
- 22.4 地理查询
- 22.4.1 地理查询
22 DSL 查询语法
22.4 地理查询
22.4.1 地理查询
根据经纬度查询。常见的使用场景包括:
-
携程:搜索我附近的酒店
-
滴滴:搜索我附近的出租车
-
微信:搜索我附近的人
-
…【搜索附近的功能】
【实现的方式不止一种】
根据经纬度查询,官方文档。
https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-queries.html
例如:
- geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档
【举个栗子】
// geo_bounding_box查询
GET /indexName/_search
{
"query": {
"geo_bounding_box": {
"FIELD": {
"top_left": {
"lat": 31.1,
"lon": 121.5
},
"bottom_right": {
"lat": 30.9,
"lon": 121.7
}
}
}
}
}
左上和右下,形成的矩阵范围【可以看到如果是这个图中,就有三个点,符合要求】
- geo_distance:查询到指定中心点小于某个距离值的所有文档
【举个栗子】
// geo_distance 查询
GET /indexName/_search
{
"query": {
"geo_distance": {
"distance": "15km",
"FIELD": "31.21,121.5"
}
}
}
这个就和我们的数据很像了,我们的location 字段就是一个点
直接试试
# distance 查询
GET /hotel/_search
{
"query": {
"geo_distance":{
"distance": "15km",
"location":"31.21,121.5"
}
}
}
直接运行
好家伙,这么多嘛【47 家】
缩小范围
OK, 这样就只有13 家满足了