# geo_distance 实战搜索距离当前位置一定范围内的酒店

之前讲解了在某一个范围内搜索,应用场景比如:上面的图,我指定 北京理工大学 和 新街口 这两个点, 要搜索这个范围内的酒店

geo_distance 是距离搜索,以一个点周围扩散的距离范围,比如我们平时使用的外卖 app、 旅游的时候搜索周边旅游景点,就是这种距离当前位置搜索

# 搜索酒店

GET /hotel_app/hotels/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": {
        "geo_distance": {
          "distance": "200km",
          "pin.location": {
            "lat": 40,
            "lon": -70
          }
        }
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 真实地理位置搜索学校

前面找了三个点,这里吧另外两个点添加进来

PUT /hotel_app/hotels/6
{
    "name": "北京理工大学",
    "pin" : {
        "location" : {
            "lat": 39.967157,
            "lon": 116.322631
        }
    }
}

PUT /hotel_app/hotels/7
{
    "name": "新街口",
    "pin" : {
        "location" : {
           "lat": 39.947025,
            "lon": 116.373511
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

搜索

GET /hotel_app/hotels/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": {
        "geo_distance": {
          "distance": "2500m",
          "pin.location": {
            "lat" : 39.957866,
            "lon" : 116.349652
          }
        }
      }
    }
  }
}


{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "hotel_app",
        "_type": "hotels",
        "_id": "5",
        "_score": 1,
        "_source": {
          "name": "北京交通大学",
          "pin": {
            "location": {
              "lat": 39.957866,
              "lon": 116.349652
            }
          }
        }
      },
      {
        "_index": "hotel_app",
        "_type": "hotels",
        "_id": "7",
        "_score": 1,
        "_source": {
          "name": "新街口",
          "pin": {
            "location": {
              "lat": 39.947025,
              "lon": 116.373511
            }
          }
        }
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

可以看到,2500 米内能找到新接口,我尝试过 3 km 的时候能把 北京理工大学 搜索出来